Я хочу реплицировать игру. Цель игры - создать путь между любыми 2 квадратами, которые имеют один и тот же цвет.opengl glsl ошибка, в которой модель становится невидимой, если я использую функцию текстур glsl с различными параметрами
Вот игра: www.mypuzzle.org/3d-logic-2
Куб имеет 6 граней. Каждая грань имеет 3x3 квадрата.
Куб имеет разные квадратные формы: пустые квадраты (отражающие окружающую среду), квадраты стен (вы не можете их окрасить), квадраты начала/,
Я близок к завершению моего проекта, но я застрял с ошибкой. Я использовал C++, sfml, opengl, glm.
Проблема в шейдерах.
вершинного шейдера:
#version 330 core
layout (location = 0) in vec3 vPosition;
layout (location = 1) in vec3 vColor;
layout (location = 2) in vec2 vTexCoord;
layout (location = 3) in float vType;
layout (location = 4) in vec3 vNormal;
out vec3 Position;
out vec3 Color;
out vec2 TexCoord;
out float Type;
out vec3 Normal;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
void main()
{
gl_Position = projection * view * model * vec4(vPosition, 1.0f);
Position = vec3(model * vec4(vPosition, 1.0f));
Color=vColor;
TexCoord=vTexCoord;
Type=vType;
Normal = mat3(transpose(inverse(model))) * vNormal;
}
Фрагмент шейдер:
#version 330 core
in vec3 Color;
in vec3 Normal;
in vec3 Position;
in vec2 TexCoord;
in float Type;
out vec4 color;
uniform samplerCube skyboxTexture;
uniform sampler2D faceTexture;
uniform sampler2D centerTexture;
void main()
{
color=vec4(0.0,0.0,0.0,1.0);
if(Type==0.0)
{
vec3 I = normalize(Position);
vec3 R = reflect(I, normalize(Normal));
if(texture(faceTexture, TexCoord)==vec4(1.0,1.0,1.0,1.0))
color=mix(texture(skyboxTexture, R),vec4(1.0,1.0,1.0,1.0),0.3);*/
}
else if(Type==1.0)
{
if(texture(centerTexture, TexCoord)==vec4(1.0,1.0,1.0,1.0))
color=vec4(Color,1.0);
}
else if(Type==-1.0)
{
color=vec4(0.0,0.0,0.0,1.0);
}
else if(Type==2.0)
{
if(texture(faceTexture, TexCoord)==vec4(1.0,1.0,1.0,1.0))
color=mix(vec4(Color,1.0),vec4(1.0,1.0,1.0,1.0),0.5);
}
}
/*
Type== 0 ---> blank square(reflects light)
Type== 1 ---> start/finish square
Type==-1 ---> wall square
Type== 2 ---> colored square that was once a black square
*/
В пиксельный шейдер я рисовать пиксели квадрата, который имеет определенный тип, поэтому шейдер входит только в 1 из 4 ifs для каждого квадрата. Программа отлично работает, если я использую только функцию glsl texture
с той же текстурой. Если я использую эту функцию 2 раза с разными текстурами, то в 2-х разных случаях, если моя модель становится невидимой. Почему это происходит?
https://postimg.org/image/lximpl0bz/
https://postimg.org/image/5dzvqz2r7/
красный квадрат типа 1. Я модифицированный код типа == 0, если и тогда моя модель пошла невидимы.