C++ 仅通过glfw绘制像素渲染器四分之一屏幕。缓冲区使用屏幕宽度*高度

C++ 仅通过glfw绘制像素渲染器四分之一屏幕。缓冲区使用屏幕宽度*高度,c++,opengl,glfw,gldrawpixels,C++,Opengl,Glfw,Gldrawpixels,我不知道如何解决这个问题,我想用这个函数来制作一个软渲染引擎来研究3D管道 这是代码: #define GLFW_INCLUDE_GLU #include <GLFW/glfw3.h> int main(int argc, const char * argv[]) { if(!glfwInit()){ //init error return -1; } int width = 200; //screen width i

我不知道如何解决这个问题,我想用这个函数来制作一个软渲染引擎来研究3D管道

这是代码:

#define GLFW_INCLUDE_GLU
#include <GLFW/glfw3.h>

int main(int argc, const char * argv[]) {
    if(!glfwInit()){    //init error
        return -1;
    }

    int width = 200;    //screen width
    int height = 200;   //screen height

    GLFWwindow* window = glfwCreateWindow(width, height, "Hello OpenGL", NULL, NULL);  //create window

    if(!window){     //create window fail
        glfwTerminate();
        return -1;
    }

    u_char* pixels = new unsigned char[width * height * 4]; //buffer
    uint index;  //temp

    //set pixel
    for (int count_a = 0; count_a < width; count_a++) {
        for (int count_b = 0; count_b < height; count_b++) {
            index = count_b * width + count_a;

            pixels[index * 4 + 0] = 255;    //red pixel
            pixels[index * 4 + 1] = 0;      //green
            pixels[index * 4 + 2] = 0;      //blue
            pixels[index * 4 + 3] = 255;    //alpha
        }
    }

    glfwMakeContextCurrent(window);
    while (!glfwWindowShouldClose(window)) {  //close window
        glClearColor(1.0, 1.0, 1.0, 1.0);  //clear screen by white pixel
        glClear(GL_COLOR_BUFFER_BIT);
        glRasterPos2f(-1, -1);   //set origin to screen bottom left
        //glPixelZoom(2, 2); //if i use this function. renderer is right.
        glDrawPixels(width, height, GL_RGBA, GL_UNSIGNED_BYTE, pixels); //draw pixel

        glfwSwapBuffers(window); //swap buffer
    }
    glfwTerminate();
    return 0;
}
#定义GLFW(包括)GLU
#包括
int main(int argc,const char*argv[]{
如果(!glfwInit()){//init错误
返回-1;
}
int width=200;//屏幕宽度
int height=200;//屏幕高度
GLFWwindow*window=glfwCreateWindow(宽度,高度,“Hello OpenGL”,NULL,NULL);//创建窗口
如果(!window){//创建窗口失败
glfwTerminate();
返回-1;
}
u_char*pixels=新的无符号字符[width*height*4];//缓冲区
uint index;//temp
//设置像素
对于(int count_a=0;count_a
我在使用GLUT时遇到了这个问题,所以我在使用GLFW重新实现代码之前和之后遇到了这个问题。这个问题是由视网膜显示引起的(正如许多其他来源所发现的),下面的内容最终为我解决了这个问题:

int width = 1360*2;    //screen width
int height = 768*2;    //screen height

GLFWwindow* window = glfwCreateWindow(width/2, height/2, "Hello OpenGL", NULL, NULL);  //create window

// ...

我在使用GLUT时遇到了这个问题,所以在使用GLFW重新实现代码之前和之后,我就遇到了这个问题。这个问题是由视网膜显示引起的(正如许多其他来源所发现的),下面的内容最终为我解决了这个问题:

int width = 1360*2;    //screen width
int height = 768*2;    //screen height

GLFWwindow* window = glfwCreateWindow(width/2, height/2, "Hello OpenGL", NULL, NULL);  //create window

// ...

您正在使用哪个版本的OpenGL?请尝试调用glLoadIdentity。请指定您自己的投影矩阵,而不是glRasterPos。您使用的是什么版本的OpenGL?请尝试调用glLoadIdentity。并指定自己的投影矩阵,而不是glRasterPos