0.f,-0.1f), DirectX::XMFLOAT4(Colors::Black)}) вот так задаю например. И цвет в шейдере определяется вот так vout.Color = vin.Color; НО там цвет меняется от вершины к вершине, как минимально изменить код чтобы каждая грань фигуры была своего цвета?
Директ не трогал, другие вот заняты DirectX::XMFLOAT4(Colors::Black)} — видно, что задает для всех вершин На примере огл вершинный #version 450 //output variable to the fragment shader layout (location = 0) out vec3 outColor; void main() { //const array of positions for the triangle const vec3 positions[3] = vec3[3]( vec3(1.f,1.f, 0.0f), vec3(-1.f,1.f, 0.0f), vec3(0.f,-1.f, 0.0f) ); //const array of colors for the triangle const vec3 colors[3] = vec3[3]( vec3(1.0f, 0.0f, 0.0f), //red vec3(0.0f, 1.0f, 0.0f), //green vec3(00.f, 0.0f, 1.0f) //blue ); //output the position of each vertex gl_Position = vec4(positions[gl_VertexIndex], 1.0f); outColor = colors[gl_VertexIndex]; } фрагментарный #version 450 //shader input layout (location = 0) in vec3 inColor; //output write layout (location = 0) out vec4 outFragColor; void main() { //return color outFragColor = vec4(inColor,1.0f); }
не, не для всех- там просто структура вертоксов такая у меня: { { DirectX::XMFLOAT3( 0.f, 0.3f,0.f), DirectX::XMFLOAT4(Colors::LightCoral)}, { DirectX::XMFLOAT3(-0.1f,0.f, 0.1f), DirectX::XMFLOAT4(Colors::Bisque)}, { DirectX::XMFLOAT3( 0.1f,0.1f, 0.1f), DirectX::XMFLOAT4(Colors::Azure)}, { DirectX::XMFLOAT3(0.f, 0.f,-0.1f), DirectX::XMFLOAT4(Colors::Black)} } std::uint16_t indicies[] = { 0,2,1, 0,3,1, 0,3,2, 1,2,3 };0
а все треугольники рисуются?
Так вроде рисуется правильно
мне хотелось бы минимально поменять код что бы цвет стороны был моно а не перетекал
Это как минимум нужно поднастроить фрагментарный шейдер, но тут уже мало что смогу сказать, я такое не пробовал даже в огл
Простейший вариант - на каждую сторону по 3 уникальные вершины
это лучше меш изменить, чтобы на каждую сторону была своя тройка вершин, тогда будет работать с интерполяцией, а отключать её я не рекомендую, чтобы можно было одновременно использовать в одном меше разные режимы
всё понял
получилось, но меня смущает увеличение с 4 до 16 вершин ради такой манипуляции с цветом
Тут 9 должно быть
там три по сторонам и дно
Обсуждают сегодня