셰이더를 사용하여 "정점 색상"삼각형을 렌더링 할 때 OpenGL "검은 색 화면"

Voxed

저는 OpenGL을 처음 접했고 정점 색상의 삼각형을 만들어야하는 정말 간단한 튜토리얼을 따라 왔습니다 (문제 의 튜토리얼 ).

하지만 내 결과는 검은 화면으로 나옵니다. 나는 그의 코드를 완전히 복사 해 보았지만 여전히 작동하지 않아서 튜토리얼이 오래되었다고 믿게됩니다.

셰이더에서 "#version 130"을 제거하려고했지만 아무것도하지 않았습니다. 또한 렌더링 기능을 디버깅했으며 실제로 호출되고 있습니다. 나는 무엇이 잘못 될 수 있는지 모른다.

이것은 내 코드입니다.

main.cpp

#ifdef _WIN32
#define _CRT_SECURE_NO_DEPRECATE
#endif

#include <GL\glew.h>
#include <GL\freeglut.h>
#include <stdio.h>

#define BUFFER_OFFSET(i) ((char *)NULL + (i))
GLuint shaderProgramID;
GLuint vao = 0;
GLuint vbo;
GLuint positionID, colorID;

#pragma region SHADER_FUNCTIONS
static char* readFile(const char* filename) {
    //Open the file
    FILE* fp = fopen(filename, "r");
    //Move to the end of file
    fseek(fp, 0, SEEK_END);
    long file_length = ftell(fp);
    fseek(fp, 0, SEEK_SET);
    char* contents = new char[file_length + 1];
    //zero out memory
    for (int i = 0; i < file_length + 1; i++) {
        contents[i] = 0;
    }
    //Read file
    fread(contents, 1, file_length, fp);
    //Denote end
    contents[file_length + 1] = '\0';
    fclose(fp);
    return contents;
}

GLuint makeVertexShader(const char* shaderSource) {
    GLuint vertexShaderID = glCreateShader(GL_VERTEX_SHADER);
    glShaderSource(vertexShaderID, 1, (const GLchar**)&shaderSource, NULL);
    glCompileShader(vertexShaderID);
    return vertexShaderID;
}

GLuint makeFragmentShader(const char* shaderSource) {
    GLuint fragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);
    glShaderSource(fragmentShaderID, 1, (const GLchar**)&shaderSource, NULL);
    glCompileShader(fragmentShaderID);
    return fragmentShaderID;
}

GLuint makeShaderProgram(GLuint vertexShaderID, GLuint fragmentShaderID) {
    GLuint shaderID = glCreateProgram();
    glAttachShader(shaderID, vertexShaderID);
    glAttachShader(shaderID, fragmentShaderID);
    glLinkProgram(shaderID);
    return shaderID;
}
#pragma endregion

void changeViewport(int w, int h) {
    glViewport(0, 0, w, h);
}

void render() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glDrawArrays(GL_TRIANGLES, 0, 3);
    glutSwapBuffers();
    printf("Debug");
}

int main(int argc, char** argv) {
    //Init GLUT
    glutInit(&argc, argv);

    //Set up some memory buffers for our display
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
    //Set up window size
    glutInitWindowSize(800, 600);
    //Create window
    glutCreateWindow("Project 1");
    //Bind the two functions to respond when necessary
    glutReshapeFunc(changeViewport);
    glutDisplayFunc(render);

    //Initialize OpenGL driver
    GLenum err = glewInit();
    if (GLEW_OK != err) {
        fprintf(stderr, "GLEW error");
        return 1;
    }

    //Vertices and colors of trangle
    GLfloat vertices[] = {
        -0.5f, -0.5f, 0.0f,
        0.5f, -0.5f, 0.0f,
        0.0f,-0.5f, 0.0f
    };
    GLfloat colors[] = {
        1.0f, 0.0f, 0.0f, 1.0f,
        0.0f, 1.0f, 0.0f, 1.0f,
        0.0f, 0.0f, 1.0f, 1.0f
    };

    #pragma region MAKE_SHADER
    char* vertexShaderSourceCode = readFile("vertexShader.vs");
    char* fragmentShaderSourceCode = readFile("fragmentShader.fs");
    GLuint vertShaderID = makeVertexShader(vertexShaderSourceCode);
    GLuint fragShaderID = makeFragmentShader(fragmentShaderSourceCode);
    GLuint shaderProgramID = makeShaderProgram(vertShaderID, fragShaderID);

    printf("vertShaderID is %d\n", vertShaderID);
    printf("fragmentShaderID is %d\n", fragShaderID);
    printf("shaderProgramID is %d\n", shaderProgramID);
    #pragma endregion

    //Create the "remember-all"
    glGenVertexArrays(1, &vao);
    glBindVertexArray(vao);

    glGenBuffers(1, &vbo);
    glBindBuffer(GL_ARRAY_BUFFER, vbo);
    //Create buffer
    glBufferData(GL_ARRAY_BUFFER, 7 * 3 * sizeof(GLfloat), NULL, GL_STATIC_DRAW);
    //Load the vertex points
    glBufferSubData(GL_ARRAY_BUFFER, 0, 3 * 3 * sizeof(GLfloat), vertices);
    //Load the colors
    glBufferSubData(GL_ARRAY_BUFFER, 3 * 3 * sizeof(GLfloat), 3 * 4 * sizeof(GLfloat), colors);

    //Find variables in shader
    positionID = glGetAttribLocation(shaderProgramID, "s_vPosition");
    colorID = glGetAttribLocation(shaderProgramID, "s_vColor");

    glVertexAttribPointer(positionID, 3, GL_FLOAT, GL_FALSE, 0, 0);
    glVertexAttribPointer(colorID, 4, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(3 * 3 * sizeof(GLfloat)));
    glUseProgram(shaderProgramID);
    glEnableVertexAttribArray(positionID);
    glEnableVertexAttribArray(colorID);

    //Start up a loop that runs in the background
    glutMainLoop();
    return 0;
}

fragmentShader.fs

#version 130

in vec4 color;
out vec4 fColor;

void main () {
    fColor = color;
}

vertexShader.vs

#version 130

in vec4 s_vPosition;
in vec4 s_vColor;
out vec4 color;

void main () {
    //gl_Position = s_mP*s_mV*s_mM*s_vPosition;
    color = s_vColor;
    gl_Position = s_vPosition;
}
Voxed

어, 이걸 만들어서 미안 해요. 잠을 자고 코드를 다시 살펴본 후 모든 정점이 동일한 "y 값"을 가지고 있음을 깨달았습니다.

GLfloat vertices[] = {
   -0.5f, -0.5f, 0.0f,
    0.5f, -0.5f, 0.0f,
    0.0f, -0.5f, 0.0f
};

어쨌든 해결되었습니다. 그리고 신은 내가 어리석은 기분이 든다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

libGdx-libgdx.g3d를 사용하여 obj 모델을로드하려고 할 때 빈 검은 색 화면

분류에서Dev

스토리 보드를 사용할 때 sceneDelegate가있는 검은 색 화면

분류에서Dev

OpenGL을 사용하여 셰이더에서 정점 색상을 설정하는 방법

분류에서Dev

직사각형을 그릴 때 파이 게임에 검은 색 화면이 표시됨

분류에서Dev

앱을 열 때 검은 색 화면을 제거하는 방법

분류에서Dev

홈 버튼을 누를 때 검은 색 화면

분류에서Dev

self.presentViewController (vc, animated : true, completed : nil) Xcode swift 2를 사용할 때 왜 검은 색 화면이 나타납니다.

분류에서Dev

하위보기를 삽입 할 때 검은 색 화면이 나타나는 이유는 무엇입니까?

분류에서Dev

Three.js r71은 json 객체를로드하려고 할 때 검은 색 화면을 표시합니다.

분류에서Dev

내 수업에서 웹뷰 URL을로드 할 때 검은 색 화면을 수정하는 방법

분류에서Dev

새 노트북에 Ubuntu 또는 Debian을 설치하려고 할 때 검은 색 화면

분류에서Dev

Scenform을 사용하여 SceneView를 조각에로드 한 후 검은 색 화면

분류에서Dev

레이어 목록 배경 드로어 블이있는 사용자 지정보기는 검은 색 화면을 렌더링합니다.

분류에서Dev

우분투 라이브 USB를로드 할 때 검은 색 화면

분류에서Dev

우분투 라이브 USB를로드 할 때 검은 색 화면

분류에서Dev

Tizen Emulator에서 테스트 앱을 실행할 때 검은 색 화면

분류에서Dev

데비안을 시작할 때 정적 커서가있는 검은 색 화면

분류에서Dev

LightDM / Ubuntu를 시작할 때 최신 Nvidia / Ati 카드의 검은 색 화면

분류에서Dev

avkit으로 비디오를 스트리밍 할 때 검은 색 화면

분류에서Dev

LightDM / Ubuntu를 시작할 때 최신 Nvidia / Ati 카드의 검은 색 화면

분류에서Dev

시작하지 않고 시작할 때 검은 색 화면 (Ubuntu 15.10)

분류에서Dev

OpenGL 텍스처가 오류없이 작동하지 않음-검은 색 화면

분류에서Dev

DropdownList에서 모달 팝업이 검은 색 화면을 표시하는 이유

분류에서Dev

내 kivy 앱을 실행하면 창에 검은 색 화면이 표시됨

분류에서Dev

Swift 앱은 iOS 8.x에서 검은 색 화면을 렌더링합니다.

분류에서Dev

랩톱에 Ubuntu (모든 버전)를 설치하거나 라이브 부팅 할 때 검은 색 화면이 나타남

분류에서Dev

PC 전원을 켤 때 검은 색 화면이 나타납니다. 전원 플러그를 제거하고 다시 연결하여 해결됨

분류에서Dev

검은 색 화면이 표시되고 활동을 확장 할 때 모바일을 다시 시작해야합니다.

분류에서Dev

Dell 노트북을 시작할 때 검은 색 화면이 표시되지만 다시 시작해도 괜찮습니다.

Related 관련 기사

  1. 1

    libGdx-libgdx.g3d를 사용하여 obj 모델을로드하려고 할 때 빈 검은 색 화면

  2. 2

    스토리 보드를 사용할 때 sceneDelegate가있는 검은 색 화면

  3. 3

    OpenGL을 사용하여 셰이더에서 정점 색상을 설정하는 방법

  4. 4

    직사각형을 그릴 때 파이 게임에 검은 색 화면이 표시됨

  5. 5

    앱을 열 때 검은 색 화면을 제거하는 방법

  6. 6

    홈 버튼을 누를 때 검은 색 화면

  7. 7

    self.presentViewController (vc, animated : true, completed : nil) Xcode swift 2를 사용할 때 왜 검은 색 화면이 나타납니다.

  8. 8

    하위보기를 삽입 할 때 검은 색 화면이 나타나는 이유는 무엇입니까?

  9. 9

    Three.js r71은 json 객체를로드하려고 할 때 검은 색 화면을 표시합니다.

  10. 10

    내 수업에서 웹뷰 URL을로드 할 때 검은 색 화면을 수정하는 방법

  11. 11

    새 노트북에 Ubuntu 또는 Debian을 설치하려고 할 때 검은 색 화면

  12. 12

    Scenform을 사용하여 SceneView를 조각에로드 한 후 검은 색 화면

  13. 13

    레이어 목록 배경 드로어 블이있는 사용자 지정보기는 검은 색 화면을 렌더링합니다.

  14. 14

    우분투 라이브 USB를로드 할 때 검은 색 화면

  15. 15

    우분투 라이브 USB를로드 할 때 검은 색 화면

  16. 16

    Tizen Emulator에서 테스트 앱을 실행할 때 검은 색 화면

  17. 17

    데비안을 시작할 때 정적 커서가있는 검은 색 화면

  18. 18

    LightDM / Ubuntu를 시작할 때 최신 Nvidia / Ati 카드의 검은 색 화면

  19. 19

    avkit으로 비디오를 스트리밍 할 때 검은 색 화면

  20. 20

    LightDM / Ubuntu를 시작할 때 최신 Nvidia / Ati 카드의 검은 색 화면

  21. 21

    시작하지 않고 시작할 때 검은 색 화면 (Ubuntu 15.10)

  22. 22

    OpenGL 텍스처가 오류없이 작동하지 않음-검은 색 화면

  23. 23

    DropdownList에서 모달 팝업이 검은 색 화면을 표시하는 이유

  24. 24

    내 kivy 앱을 실행하면 창에 검은 색 화면이 표시됨

  25. 25

    Swift 앱은 iOS 8.x에서 검은 색 화면을 렌더링합니다.

  26. 26

    랩톱에 Ubuntu (모든 버전)를 설치하거나 라이브 부팅 할 때 검은 색 화면이 나타남

  27. 27

    PC 전원을 켤 때 검은 색 화면이 나타납니다. 전원 플러그를 제거하고 다시 연결하여 해결됨

  28. 28

    검은 색 화면이 표시되고 활동을 확장 할 때 모바일을 다시 시작해야합니다.

  29. 29

    Dell 노트북을 시작할 때 검은 색 화면이 표시되지만 다시 시작해도 괜찮습니다.

뜨겁다태그

보관