c++ - 如何设置opengl对象的大小?

标签 c++ opengl glut wavefront opengl-compat

我必须在opengl中显示一个对象(这是一个作业),我在互联网上找到了一个很好的代码,但是显示的对象的大小非常小,我不知道如何更改它以显示更大尺寸的物体。

我认为我必须修改reshape、drawObject和display函数,但我不知道opengl及其函数,所以我不知道我应该修改哪部分代码。

#include<stdio.h>
#include"glut.h"

GLuint object;
float objectrot;
char ch = '1';

void loadObj(const char* fname)
{
    FILE* fp;
    int read;
    GLfloat x, y, z;
    char ch;

    object = glGenLists(1);
    fp = fopen(fname, "r");

    if (!fp)
    {
        printf("can't open file %s\n", fname);
        exit(1);
    }
    glPointSize(2.0);
    glNewList(object, GL_COMPILE);
    {
        glPushMatrix();
        glBegin(GL_POINTS);
        while (!(feof(fp)))
        {
            read = fscanf(fp, "%c %f %f %f", &ch, &x, &y, &z);
            if (read == 4 && ch == 'v')
            {
                glVertex3f(x, y, z);
            }
        }
        glEnd();
    }

    glPopMatrix();
    glEndList();

    fclose(fp);
}

void reshape(int w, int h)
{
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(60, (GLfloat)w / (GLfloat)h, 0.1, 1000.0);
    glMatrixMode(GL_MODELVIEW);
}

void drawObject()
{
    glPushMatrix();
    glTranslatef(0, -40.00, -105);
    glColor3f(255, 255, 255);
    glScalef(0.1, 0.1, 0.1);
    glRotatef(objectrot, 0, 1, 0);
    glCallList(object);
    glPopMatrix();
    objectrot += 0.001;
    if (objectrot > 360)objectrot -= 360;
}

void display(void)
{
    glClearColor(0.0, 0.0, 0.0, 1.0);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    drawObject();
    glutSwapBuffers(); 
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowSize(800, 450);
    glutInitWindowPosition(20, 20);
    glutCreateWindow("ObjLoader");
    glutReshapeFunc(reshape);
    glutDisplayFunc(display);
    glutIdleFunc(display);
    loadObj("cat.obj");
    glutMainLoop();
    return 0;
}

我期望窗口中有一个更大的对象,但它很小

最佳答案

您需要增加比例因子。

void drawObject()
{
    glPushMatrix();
    glTranslatef(0, -40.00, -105);
    glColor3f(255, 255, 255);
    glScalef(1.0, 1.0, 1.0);
    glRotatef(objectrot, 0, 1, 0);
    glCallList(object);
    glPopMatrix();
    objectrot += 0.001;
    if (objectrot > 360)objectrot -= 360;
}

您应该向 glScalef() 传递一个更大的数字。尝试 1.0,看看是否有效。

关于c++ - 如何设置opengl对象的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58631717/

相关文章:

c++ - 如何将具有指针成员的非 QObject 类公开给 QML?

opengl - OpenCL - 压缩的 OpenGL 纹理

java - 使用 LWJGL opengl 对球体进行纹理化?

c++ - OpenCV VideoCapture 仅在第一次调用 glutDisplayFunc 回调时返回空帧

c++ - C编程: translated function from MATLAB to C gives slightly (but significantly) different result

c++ - 使用 OpenCV 读取文件夹中的有序图像序列

c++ - 为什么我的有线球体在平移和改变摄像机角度时会变成椭球体?

C++、过剩、OpenGL "resize window"事件?

c++ - 如何编写最薄的类型包装器

c++ - #错误#使用了可能未初始化的局部指针变量 'ptrNames'