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

C++ 如何设置opengl对象的大小?,c++,opengl,glut,wavefront,opengl-compat,C++,Opengl,Glut,Wavefront,Opengl Compat,我必须在opengl中显示一个对象(这是一个家庭作业),我在互联网上找到了一个很好的代码,但是显示对象的大小非常小,我不知道如何更改它以更大的大小显示对象 我认为我必须修改重塑、drawObject和显示函数,但我不知道opengl及其函数,所以我不知道应该修改代码的哪一部分 #include<stdio.h> #include"glut.h" GLuint object; float objectrot; char ch = '1'; void loadObj(const ch

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

我认为我必须修改重塑、drawObject和显示函数,但我不知道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;
}
#包括
#包括“glut.h”
胶合物;
漂浮物腐烂;
char ch='1';
void loadObj(常量字符*fname)
{
文件*fp;
int-read;
glx,y,z;
char ch;
对象=glGenLists(1);
fp=fopen(fname,“r”);
如果(!fp)
{
printf(“无法打开文件%s\n”,fname);
出口(1);
}
glPointSize(2.0);
glNewList(对象,GL_编译);
{
glPushMatrix();
glBegin(总分);
而(!(feof(fp)))
{
read=fscanf(fp,“%c%f%f”、&ch、&x、&y、&z);
如果(读==4&&ch==v')
{
glVertex3f(x,y,z);
}
}
格伦德();
}
glPopMatrix();
格伦德利斯();
fclose(fp);
}
空洞重塑(整数w,整数h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_投影);
glLoadIdentity();
葡萄糖(60,(GLfloat)w/(GLfloat)h,0.11000.0);
glMatrixMode(GLU模型视图);
}
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(对象);
glPopMatrix();
objectrot+=0.001;
如果(objectrot>360)objectrot-=360;
}
作废显示(作废)
{
glClearColor(0.0,0.0,0.0,1.0);
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
glLoadIdentity();
drawObject();
glutSwapBuffers();
}
int main(int argc,字符**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_双精度| GLUT_RGB | GLUT_深度);
glutInitWindowSize(800450);
位置(20,20);
glutCreateWindow(“对象加载程序”);
GLUTREFORUNC(重塑);
glutDisplayFunc(显示器);
glutIdleFunc(显示);
loadObj(“目录obj”);
glutMainLoop();
返回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,看看它是否有效。

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