如何设置opengl对象的大小?

Posted

技术标签:

【中文标题】如何设置opengl对象的大小?【英文标题】:How to set the size of an opengl object? 【发布时间】:2019-10-30 18:30:53 【问题描述】:

我必须在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;

我希望窗口中有一个更大的对象,但它非常小

【问题讨论】:

【参考方案1】:

您需要增加比例因子。

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 看看是否可行。

【讨论】:

它不起作用,我现在在窗口中看不到对象

以上是关于如何设置opengl对象的大小?的主要内容,如果未能解决你的问题,请参考以下文章

C#如何从Tao库中获取OpenGL中生成的对象的大小

在 OpenGL 中调整对象大小

如何在 OpenGL 中仅为一个对象设置材质?

如何防止缩放低于定义(OpenGL)

如何使 OpenGL 视口具有渲染到其中的 QML 项目的确切大小和位置?

Qt OpenGL点大小