翻写Nehe的OpenGL教程之准备篇(Xcode+C开发)

本文介绍了如何在Mac OS系统上使用Xcode搭建OpenGL开发环境,免去了额外下载库文件的步骤。通过创建命令行工具项目,选择C语言,然后编写并运行基础的OpenGL代码,展示了一个简单的四边形。后续还将涉及更多OpenGL的配置和事件处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在研究Chromium渲染机制以及硬件加速等地方,都涉及到OpenGL的许多方方面面的内容,鉴于以前没接触过OpenGL,所以需要从一些容易入门的教程开始,网上都推荐Nehe的OpenGL教程,准备从把所有教程边学边翻写,开发平台是 Mac + Xcode + c。

首先得搭建OpenGL平台,由于Mac OS系统自带GLUT,所以无需再从网上下载各种openGL库文件。但是需要Xcode,相信在mac上做过开发的人,这都知道这个利器。本文用到的Xcode版本是7.1。

简要步骤如下:

#1 在Xcode的启动面板中,选择 Application,Command Line Tool,如下图所示;



#2 然后填上必要的选项,另外开发语言可以选择C/C++,本文选择使用C,如下图所示;


#3 点击create之后,会进入代码编写界面,点击main.c开始coding。

#4 只需要敲上以下代码即可进行 Command +R,进行编译运行了,另外退出命令是Command +q:

#include <stdio.h>

#include <GLUT/glut.h>

void display() {

    glClear(GL_COLOR_BUFFER_BIT);

   

    glBegin(GL_POLYGON);

      glVertex3f(-0.5f, -0.5f0.0f);  // 四边形的左下顶点

      glVertex3f(-0.5f0.5f0.0f); // 四边形的左上顶点

      glVertex3f( 0.5f0.5f 0.0f);  // 四边形的右上顶点

      glVertex3f( 0.5f, -0.5f 0.0f);  // 四边形的右下顶点

    glEnd();

   

    glFlush();

}

 

int main(int argc,const char * argv[]) {

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_SINGLE |GLUT_RGB | GLUT_DEPTH);

    glutInitWindowSize(500,500);

    glutInitWindowPosition(100,100);

    glutCreateWindow("OpenGL Demo_1");

    glutDisplayFunc(display);

    glutMainLoop();

   

    return 0;

}

编译运行以上代码后,效果是这样的:


其实这个示例代码真的非常简单,但是为了后面更方面地学习OpenGL,还需要对OpenGL做更多的配置,以及事件处理等。

OpenGL更多配置:

void initOpenGL() {

    glShadeModel(GL_SMOOTH);

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

    glClearDepth(1.0f);

    glEnable(GL_DEPTH_TEST);

    glDepthFunc(GL_LEQUAL);

    glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);

}

 

屏幕改变事件处理:

void reshape(int width,intheight) {

    if (height == 0)

        height = 1;

   

    glViewport(0,0, (GLsizei)width, (GLsizei)height);

    glMatrixMode(GL_PROJECTION);

    glLoadIdentity();

    gluPerspective(45.0f, (GLfloat)width / (GLfloat)height,0.1f, 100.0f);

    glMatrixMode(GL_MODELVIEW);

    glLoadIdentity();

}

按键事件处理:

void keyboard(unsignedcharkey, int x,int y) {

    switch (key) {

        case 27:

            exit(0);

            break;

    }

}

 

具体代码参见源码。


NEHEOPENGL教程 第42课 多视窗口… NEHEOPENGL教程 第42课 多视窗口… NeHeOPENGL中文教程:第41课 体… NeHeOPENGL中文教程:第40课 绳… NeHeOPENGL中文教程:第39课 物… NeHeOPENGL中文教程:第39课 物… NeHeOPENGL中文教程:第38课 从… NeHeOPENGL中文教程:第37课 卡… 愚人节十大IT假新闻:Opera浏览器… NeHeOPENGL中文教程:第36课 放… NeHeOPENGL中文教程:第35课 AVI… NeHeOPENGL中文教程:第35课 AVI… NeHeOPENGL中文教程:第34课 从… NeHeOPENGL中文教程:第33课 加… NeHeOPENGL中文教程:第32课 Alp… NeHeOPENGL中文教程:第32课 Alp… NeHeOPENGL中文教程:第32课 Alp… NeHeOPENGL中文教程:第31课 模… NEHEOPENGL中文教程:第30课 碰… NEHEOPENGL中文教程:第30课 碰… NeHeOPENGL中文教程:第29课 Bli… NeHeOPENGL中文教程:第28课 贝… NeHeOPENGL中文教程:第27课 影… NeHeOPENGL中文教程:第26课剪裁… NeHeOPENGL中文教程:第25课 变… NeHeOPENGL中文教程:第24课 TAG… NeHeOPENGL中文教程:第23课 球… NeHeOPENGL中文教程:第22课 凸… NeHeOPENGL中文教程:第22课 凸… NeHeOPENGL中文教程:第21课 反… NeHeOPENGL中文教程:第21课 反… NeHeOPENGL中文教程:第20课 蒙… NeHeOPENGL中文教程:第19课 粒… NeHeOPENGL中文教程:第18课 二… NeHeOPENGL中文教程:第17课 2D… NeHeOPENGL中文教程:第16课 雾 NeHeOPENGL中文教程:第15课 图… NeHeOPENGL中文教程:第14课 图… NeHeOPENGL中文教程:第13课 位… NeHeOPENGL中文教程:第12课 显… NeHeOPENGL中文教程:第11课 飘… NeHeOPENGL中文教程:第十课 漫… NeHeOPENGL中文教程:第九课 漂… NeHeOPENGL中文教程:第八课 Alp… NeHeOPENGL中文教程:第七课 纹… NeHeOPENGL中文教程:第七课 纹… NeHeOPENGL中文教程:第六课 纹… NeHeOPENGL中文教程:第五课 向3… NeHeOPENGL中文教程:第四课 旋… NeHeOPENGL中文教程:第三课 着… NeHeOPENGL中文教程:第二课 多… NeHeOPENGL中文教程:第一课 新… NeHeOPENGL中文教程:第一课 新… DirectX与OpenGL方面的经典电子书… VC++ 6.0下OpengGL配置以及glut配… 怎样开始学习OpenGL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值