OpenGL : 프로그램이 변형 된 사각형 대신 일반 흰색 사각형을 렌더링합니다.

CodyT96

색상이 있고 4x4 행렬로 인해 변형 된 2D 사각형을 렌더링하려고합니다. 출력은 다음과 같아야합니다.

올바른 출력

그러나 대신 이것을 얻고 있습니다.

화이트 스퀘어

다른 프로젝트에서이 문제가 발생했기 때문에 실망 스럽습니다. 저의 교수님이 문제를 해결하는 방법을 알려 주셨고 우리가 한 것은 여기저기서 몇 가지를 가지고 노는 것뿐이었습니다. 마술처럼 작동했고 코드는 변경되지 않았습니다. 이제이 문제가 다시 발생하고 왜 이런 일이 발생하는지에 대한 단서가 없습니다. 문자에 대한 튜토리얼 코드를 올바르게 입력했는데 올바르게 렌더링되지 않습니다. 그러나 내 교수의 컴퓨터에서 올바르게 렌더링되었습니다.

다음은 코드입니다.

#include <GL/glew.h>
#include <GL/freeglut.h>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>
#include <iostream>

#define WINDOW_TITLE "Modern OpenGL"

#ifndef GLSL
#define GLSL(Version, Source) "#version" #Version "\n" #Source
#endif

GLint shaderProgram, windowWidth = 800, windowHeight = 600;
GLuint VBO, VAO, EBO, texture;

void uResizeWindow(int, int);
void uRenderGraphics();
void uCreateShader();
void uCreateBuffers();



//Vertex shader source code
const GLchar* vertexShaderSource = GLSL(330,
    layout(location = 0) in vec3 position;
layout(location = 1) in vec3 color;

out vec3 mobileColor;

uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;

void main() {
    gl_Position = projection * view * model * vec4(position, 1.0f); //transforms vertices to clip coordinates
    mobileColor = color; //references incoming color data
});

//Fragment shader source code
const GLchar* fragmentShaderSource = GLSL(330,
    in vec3 mobileColor;

out vec4 gpuColor;

void main() {
    gpuColor = vec4(mobileColor, 1.0f);
});



int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowSize(windowWidth, windowHeight);
    glutCreateWindow(WINDOW_TITLE);
    glutReshapeFunc(uResizeWindow);
    glewExperimental = GL_TRUE;

    if (glewInit() != GLEW_OK) {
        std::cout << "Failed to initialize GLEW" << std::endl;
    }

    uCreateShader();
    uCreateBuffers();

    glUseProgram(shaderProgram);

    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

    glutDisplayFunc(uRenderGraphics);

    glutMainLoop();

    //Destroys buffer objects once used
    glDeleteVertexArrays(1, &VAO);
    glDeleteBuffers(1, &VBO);
    glDeleteBuffers(1, &EBO);

    return 0;
}

void uResizeWindow(int w, int h) {
    windowWidth = w;
    windowHeight = h;
    glViewport(0, 0, windowWidth, windowHeight);
}

void uRenderGraphics() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    
    glBindVertexArray(VAO);

    glm::mat4 model(1.0f);
    model = glm::translate(model, glm::vec3(0.0f, 0.0f, 0.0f)); //place object at center of viewport
    model = glm::rotate(model, 15.0f, glm::vec3(1.0f, 0.0f, 0.0f)); //rotate object 15 degrees on x-axis
    model = glm::scale(model, glm::vec3(2.0f, 2.0f, 2.0f)); //increase object size by factor of 2

    //transforms the camera
    glm::mat4 view(1.0f);

    view = glm::translate(view, glm::vec3(0.0f, 0.0f, -3.0f)); //moves camera backwards -3 units in z

    //creates perspective projection
    glm::mat4 projection(1.0f);
    projection = glm::perspective(45.0f, (GLfloat)windowWidth / (GLfloat)windowHeight, 0.1f, 100.0f);

    //retrieves and passes transform matrices to shader program
    GLint modelLoc = glGetUniformLocation(shaderProgram, "model");
    GLint viewLoc = glGetUniformLocation(shaderProgram, "view");
    GLint projLoc = glGetUniformLocation(shaderProgram, "projection");

    //draws the triangles
    glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
    glBindVertexArray(0); //deactive the vertex array object

    glutSwapBuffers();
}

void uCreateShader() {
    //vertex
    GLint vertexShader = glCreateShader(GL_VERTEX_SHADER);
    glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
    glCompileShader(vertexShader);

    //fragment
    GLint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
    glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
    glCompileShader(fragmentShader);

    shaderProgram = glCreateProgram();
    glAttachShader(shaderProgram, vertexShader);
    glAttachShader(shaderProgram, fragmentShader);
    glLinkProgram(shaderProgram);

    glDeleteShader(vertexShader);
    glDeleteShader(fragmentShader);
}

void uCreateBuffers() {
    GLfloat vertices[] = {
        0.5f, 0.5f, 0.0f,     1.0f, 0.0f, 0.0f, //top right vertex 0
        0.5f, -0.5f, 0.0f,    0.0f, 1.0f, 0.0f, //bottom right vertex 1
        -0.5f, -0.5f, 0.0f,   0.0f, 0.0f, 1.0f, //bottom left vertex 2
        -0.5f, 0.5f, 0.0f,    1.0f, 0.0f, 1.0f  //top left vertex 3
    };

    GLuint indices[] = {
        0, 1, 3, //triangle 1
        1, 2, 3 //triangle 2
    };

    //gen buffer ids
    glGenVertexArrays(1, &VAO);
    glGenBuffers(1, &VBO);
    glGenBuffers(1, &EBO);

    glBindVertexArray(VAO);
    
    glBindBuffer(GL_ARRAY_BUFFER, VBO);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);

    //set attrib pointer 0 to hold pos data
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)0);
    glEnableVertexAttribArray(0);
    //set attrib pointer 1 to hold color data
    glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat)));
    glEnableVertexAttribArray(1);

    glBindVertexArray(0); //deactivate VAO
}
Rabbid76

GLSL 매크로 (이후 #version) 에 공백이 없기 때문에 정점 셰이더와 조각 셰이더를 컴파일 할 수 없습니다 .

#define GLSL(Version, Source) "#version" #Version "\n" #Source

#define GLSL(Version, Source) "#version " #Version "\n" #Source

셰이더 컴파일이 성공했는지, 프로그램 객체가 성공적으로 연결되었는지 확인하는 것이 좋습니다.
셰이더 컴파일이 성공하면 glGetShaderiv및 매개 변수 로 확인할 수 있습니다 GL_COMPILE_STATUS. 프로그램 연결이 성공하면 glGetProgramiv및 매개 변수 로 확인할 수 있습니다 GL_LINK_STATUS. OpenGL에
대한 답변 은 Quads를 무시하고 Triangles로 만듭니다 .


각도 인수의 단위glm::perspective라디안입니다 .

projection = glm::perspective(45.0f, (GLfloat)windowWidth / (GLfloat)windowHeight, 0.1f, 100.0f);

projection = glm::perspective(glm::radians(45.0f),
    (GLfloat)windowWidth / (GLfloat)windowHeight, 0.1f, 100.0f);

매트릭스 유니폼을 설정하지 못했습니다.

GLint modelLoc = glGetUniformLocation(shaderProgram, "model");
GLint viewLoc = glGetUniformLocation(shaderProgram, "view");
GLint projLoc = glGetUniformLocation(shaderProgram, "projection");

glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model));
glUniformMatrix4fv(viewLoc, 1, GL_FALSE, glm::value_ptr(view));
glUniformMatrix4fv(projLoc, 1, GL_FALSE, glm::value_ptr(projection));

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

OpenGL은 검은 색 사각형 만 렌더링합니다.

분류에서Dev

OpenGL / GLFW / FreeType으로 텍스트를 그리면 글리프 대신 흰색 직사각형이 생성됩니다.

분류에서Dev

SFML이 텍스처 대신 흰색 사각형을로드하는 이유는 무엇입니까?

분류에서Dev

흰색 반점을 직사각형으로 표시

분류에서Dev

OpenGL 색 사각형

분류에서Dev

각 셀이 검은 색 또는 흰색 인 정사각형 행렬입니다. 최대 흰색 하위 제곱을 찾는 알고리즘 설계

분류에서Dev

SDL2 & Glew를 사용하여 OpenGL에서 간단한 흰색 사각형을 그리려고합니다. 검은 화면이 나타납니다.

분류에서Dev

OpenGL에서 시각적으로 완벽한 사각형을 렌더링합니까?

분류에서Dev

WPF 복사 혼합 일반 다각형을 응용 프로그램으로

분류에서Dev

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

분류에서Dev

HTML 5 캔버스 직사각형 (픽셀 크기)으로 그림을 그리면 파란색 대신 검은 색 직사각형이 나타 납니까?

분류에서Dev

스크램블 된 이미지에서 흰색 사각형 제외

분류에서Dev

흰색 사각형 SFML

분류에서Dev

OpenGL ES 2 (iOS)에서 단순 사각형을 렌더링하는 잘못된 변환

분류에서Dev

OpenGL에서 서로 다른 색상의 사각형으로 사각형 그리기

분류에서Dev

OpenGL로 렌더링 된 예기치 않은 삼각형

분류에서Dev

스프라이트는 SFML에서 흰색 사각형입니다.

분류에서Dev

OpenGL-Java-렌더링 문제, 다각형이 깜박이고 사라짐

분류에서Dev

사각형을 그릴 때 OpenGL 원 반경 문제

분류에서Dev

OpenGL은 직사각형 채우기 창을 그립니다.

분류에서Dev

OpenGL ES는 Android에서 사각형을 그립니다.

분류에서Dev

이 파이 게임 프로그램의 각 사각형에 대한 사각형 안에 마우스 클릭이 있는지 어떻게 확인합니까?

분류에서Dev

R 대신 텍스트의 사각형으로 플롯을 그립니다

분류에서Dev

일반 텍스트 블록을 정사각형으로 만드는 자동화 된 방법이 있습니까?

분류에서Dev

react-file-viewer는 파일 유형이 변경된 경우에만 다시 렌더링합니다.

분류에서Dev

C # Tetris, 행이나 선 대신 형성된 사각형 지우기

분류에서Dev

OpenGL 3.3을 사용하는 VBO / 셰이더 / MVP 매트릭스의 왜곡 된 삼각형

분류에서Dev

Phonegap Build, Firebase 사용시 알림 아이콘이 흰색 / 회색 정사각형입니다.

분류에서Dev

일부 장소의 공백에 흰색 직사각형을 표시하는 Gvim

Related 관련 기사

  1. 1

    OpenGL은 검은 색 사각형 만 렌더링합니다.

  2. 2

    OpenGL / GLFW / FreeType으로 텍스트를 그리면 글리프 대신 흰색 직사각형이 생성됩니다.

  3. 3

    SFML이 텍스처 대신 흰색 사각형을로드하는 이유는 무엇입니까?

  4. 4

    흰색 반점을 직사각형으로 표시

  5. 5

    OpenGL 색 사각형

  6. 6

    각 셀이 검은 색 또는 흰색 인 정사각형 행렬입니다. 최대 흰색 하위 제곱을 찾는 알고리즘 설계

  7. 7

    SDL2 & Glew를 사용하여 OpenGL에서 간단한 흰색 사각형을 그리려고합니다. 검은 화면이 나타납니다.

  8. 8

    OpenGL에서 시각적으로 완벽한 사각형을 렌더링합니까?

  9. 9

    WPF 복사 혼합 일반 다각형을 응용 프로그램으로

  10. 10

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

  11. 11

    HTML 5 캔버스 직사각형 (픽셀 크기)으로 그림을 그리면 파란색 대신 검은 색 직사각형이 나타 납니까?

  12. 12

    스크램블 된 이미지에서 흰색 사각형 제외

  13. 13

    흰색 사각형 SFML

  14. 14

    OpenGL ES 2 (iOS)에서 단순 사각형을 렌더링하는 잘못된 변환

  15. 15

    OpenGL에서 서로 다른 색상의 사각형으로 사각형 그리기

  16. 16

    OpenGL로 렌더링 된 예기치 않은 삼각형

  17. 17

    스프라이트는 SFML에서 흰색 사각형입니다.

  18. 18

    OpenGL-Java-렌더링 문제, 다각형이 깜박이고 사라짐

  19. 19

    사각형을 그릴 때 OpenGL 원 반경 문제

  20. 20

    OpenGL은 직사각형 채우기 창을 그립니다.

  21. 21

    OpenGL ES는 Android에서 사각형을 그립니다.

  22. 22

    이 파이 게임 프로그램의 각 사각형에 대한 사각형 안에 마우스 클릭이 있는지 어떻게 확인합니까?

  23. 23

    R 대신 텍스트의 사각형으로 플롯을 그립니다

  24. 24

    일반 텍스트 블록을 정사각형으로 만드는 자동화 된 방법이 있습니까?

  25. 25

    react-file-viewer는 파일 유형이 변경된 경우에만 다시 렌더링합니다.

  26. 26

    C # Tetris, 행이나 선 대신 형성된 사각형 지우기

  27. 27

    OpenGL 3.3을 사용하는 VBO / 셰이더 / MVP 매트릭스의 왜곡 된 삼각형

  28. 28

    Phonegap Build, Firebase 사용시 알림 아이콘이 흰색 / 회색 정사각형입니다.

  29. 29

    일부 장소의 공백에 흰색 직사각형을 표시하는 Gvim

뜨겁다태그

보관