[英]OpenGL does not draw as expected
我目前正在通過當前的OpenGL編程指南4.3版進行工作。 我實現了第一個示例的代碼,該代碼應顯示兩個三角形。 基本上很簡單。
但是,當我運行該代碼時,什么也沒有顯示(只是黑色的窗口)。
這是創建三角形的init函數:
GLuint vertexArrayObjects[1];
GLuint buffers[1];
const GLuint vertexCount = 6;
void init() {
// glClearColor(0,0,0,0);
glGenVertexArrays(1, vertexArrayObjects);
glBindVertexArray(vertexArrayObjects[0]);
GLfloat vertices[vertexCount][1] {
{-90.0, -90.0},
{ 85.0, -90.0},
{-90.0, 85.0},
{ 90.0, -85.0},
{ 90.0, 90.0},
{-85.0, 90.0}
};
glGenBuffers(1, buffers);
glBindBuffer(GL_ARRAY_BUFFER, buffers[0]);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
ShaderInfo shaders[] {
{GL_VERTEX_SHADER, "one.vsh"},
{GL_FRAGMENT_SHADER, "one.fsh"},
{GL_NONE, nullptr}
};
GLuint program = LoadShaders(shaders);
glUseProgram(program);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, ((char *)NULL + (0)));
glEnableVertexAttribArray(0);
}
和非常簡單的繪制:
void display() {
glClear(GL_COLOR_BUFFER_BIT);
glBindVertexArray(vertexArrayObjects[0]);
glDrawArrays(GL_TRIANGLES, 0, vertexCount);
glFlush();
}
但是如前所述,什么也沒畫。 我的實現中有錯誤嗎?
對於本書中的第一個示例,沒有應用任何轉換(即,在頂點着色器中,頂點的位置vPosition
直接映射到輸出位置gl_Position
)。 這樣,窗口的坐標系是標准化的設備坐標 。 只有在x和y中坐標在[-1,1]之間的對象才會被傳遞到光柵化器(並且不會被裁剪)。 給定您在程序中指定的幾何形狀,渲染的三角形將完全覆蓋視口,因此您應該在片段着色器(藍色)中看到指定的顏色。
否則,您的代碼看起來正確。 (盡管您不需要將nullptr
傳遞到LoadShaders
的着色器列表中。僅查找GL_NONE
)。
好吧,我知道了問題所在。 構建應用程序后,該應用程序將在與源完全不同的位置運行,並且着色器文件不會復制到目標目錄中。 因此,該程序顯然無法讀取它們,並且什么也不顯示。 用絕對路徑替換相對着色器路徑one.vsh
和one.fsh
解決了此問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.