을 사라지게 정확히 그 의미에 : 심지어 최대한 빨리 버텍스 쉐이더를 사용하지만 버텍스 쉐이더는 GUI 내가 GUI의 렌더링하는 몇 가지 코드를 가지고 있고, 그때 버텍스 쉐이더를 사용 해달라고 경우는 렌더링
, 단순히 그것은 내 GUI가
사라하게, 그렇지 않으면 숨 깁니다, 또는 이동, 또는
gl_position = vec4(position,1.0);
호출 한 뭐죠는 OpenGL에서 GUI를위한 셰이더를 가지고있는 올바른 방법?
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, width, 0, height, -10, 10);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glDisable(GL_CULL_FACE);
glDisable(GL_DEPTH_TEST);
RendererUtils.setWireframeMode(false);
for (Interface i : interfaces)
{
i.updateShaderForThisB();
if (i instanceof InterfaceContainer)
{
((InterfaceContainer) i).draw();
}
else
{
((InterfaceControl) i).draw();
}
}
InterfaceShader.getInstance().unbind();
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
InterfaceContainer 및 InterfaceControl의 무승부 호출이 거의 같은, 그래서 나는 단지 그들 중 하나를 추가 할 것입니다 :
GUI 렌더링합니다.
InterfaceControl.draw()
public void draw()
{
this.updateShaderForThisB();
this.getMesh().draw();
if (this.hasText)
{
//this.updateShaderForThisF();
//drawText();
}
}
InterfaceControl.updateShaderForThisB()
public void updateShaderForThisB()
{
InterfaceShader shader = InterfaceShader.getInstance();
shader.bind();
shader.setColour(this.getActingColour());
shader.setLocation(this.getLocation());
shader.setSize(this.getBounds());
shader.setGradient(this.getShouldGradient());
shader.updateUniforms();
}
Mesh.draw()
public void draw()
{
glEnableVertexAttribArray(0); //Vertices
glEnableVertexAttribArray(1); //Tex coords
glEnableVertexAttribArray(2); //Normals
glBindBuffer(GL_ARRAY_BUFFER,vbo);
glVertexAttribPointer(0, 3, GL_FLOAT, false, Vertex.SIZE * 4, 0);
glVertexAttribPointer(1, 2, GL_FLOAT, false, Vertex.SIZE * 4, 12);
glVertexAttribPointer(2, 3, GL_FLOAT, false, Vertex.SIZE * 4, 20);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
glDrawElements(GL_TRIANGLES, size, GL_UNSIGNED_INT,0);
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glDisableVertexAttribArray(2);
}
InterfaceShader.vs
#version 330
layout(location = 0) in vec3 position;
layout(location = 1) in vec2 texCoord;
uniform mat4 viewMatrix;
out vec2 texCoord0;
void main()
{
gl_Position = viewMatrix * vec4(position,1.0);
texCoord0 = texCoord;
}
,
누구나 내가 간과 한 명백한 문제를 볼 수 있습니까? 내 첫번째 생각은 쉐이더가 현실 세계에 내 인터페이스 중심의 좌표를 (예 : 50,50,1) 좌표 번역되었다, 그러나 나는
편집 몰라 : 요청으로 업데이트 된 쉐이더 코드 및 매트릭스 투사 코드
추가 는뷰 매트릭스 및를 얻기위한 클래스 변환 용 페이스트 빈, 그것은 셰이더
> 누구나 내가 간과 한 명백한 문제를 볼 수 있습니까? 예. OpenGL 매트릭스 스택을 사용하여 변환 작업을 수행하고 있습니다. 버텍스 쉐이더없이 렌더링 할 때 기본/내장 고정 함수 파이프 라인이 해당 행 스택 변환을 설명하지만, 지나치게 간단한 사용자 정의 버텍스 쉐이더는 그렇지 않습니다. 단순히 모델 공간 좌표를 가져 와서이를 클립 공간 좌표로 출력합니다. OpenGL 렌더링 파이프 라인과 셰이더 작동 방식에 대해 읽어야합니다. – httpdigest
뭔가 간단 할 것이라고 알고, 내 다른 셰이더가 잘 작동하지만 나는 어떤 변형이 꼭지점에서 발생하기를 원하지 않기 때문에이 행렬에 어떤 행렬이 필요하지 않다고 생각했습니다. – DuskFall