OpenGL编程-第一个程序-画出一个正方形

程序如下

#include <GL/glut.h>  

//  #pragma comment(linker, "/subsystem:/"windows/" /entry:/"mainCRTStartup/"" )  

void myDisplay(void)
{
    glClear(GL_COLOR_BUFFER_BIT);              //glClear,清除。GL_COLOR_BUFFER_BIT表示清除颜色,glClear函数还可以清除其它的东西
    glRectf(-0.5f, -0.5f, 0.5f, 0.5f);         //  glRectf,画一个矩形。四个参数分别表示了位于对角线上的两个点的横、纵坐标
    glFlush();
}  

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);                    //glutInit,对GLUT进行初始化,这个函数必须在其它的GLUT使用之前调用一次。
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);  //glutInitDisplayMode,设置显示方式,其中GLUT_RGB表示使用RGB颜色,GLUT_INDEX(表示使用索引颜色
    glutInitWindowPosition(100, 100);     // glutInitWindowPosition, 设置窗口在屏幕中的位置
    glutInitWindowSize(400, 400);        // 设置窗口的大小
    glutCreateWindow("第一个OpenGL程序");  //glutCreateWindow,根据前面设置的信息创建窗口。参数将被作为窗口的标题。注意:窗口被创建后,并不立即显示到屏幕上。/需要调用glutMainLoop才能看到窗口。 
    glutDisplayFunc(&myDisplay);         //设置一个函数,当需要进行画图时,这个函数就会被调用。(
    glutMainLoop();                      //进行一个消息循环。
    return 0;
}  

/*
1、glutInit,对GLUT进行初始化,这个函数必须在其它的GLUT使用之前调用一次。其格式比较死板,一般照抄这句glutInit(&argc, argv)就可以了。
2、glutInitDisplayMode,设置显示方式,其中GLUT_RGB表示使用RGB颜色,与之对应的还有GLUT_INDEX(表示使用索引颜色)。GLUT_SINGLE表示使用单缓冲,与之对应的还有GLUT_DOUBLE(使用双缓冲)。更多信息,请自己Google。当然以后的教程也会有一些讲解。
3、glutInitWindowPosition,这个简单,设置窗口在屏幕中的位置。
4、glutInitWindowSize,这个也简单,设置窗口的大小。
5、glutCreateWindow,根据前面设置的信息创建窗口。参数将被作为窗口的标题。注意:窗口被创建后,并不立即显示到屏幕上。需要调用glutMainLoop才能看到窗口。
6、glutDisplayFunc,设置一个函数,当需要进行画图时,这个函数就会被调用。(这个说法不够准确,但准确的说法可能初学者不太好理解,暂时这样说吧)。
7、glutMainLoop,进行一个消息循环。(这个可能初学者也不太明白,现在只需要知道这个函数可以显示窗口,并且等待窗口关闭后才会返回,这就足够了。)
1、glClear,清除。GL_COLOR_BUFFER_BIT表示清除颜色,glClear函数还可以清除其它的东西,但这里不作介绍。
2、glRectf,画一个矩形。四个参数分别表示了位于对角线上的两个点的横、纵坐标。
3、glFlush,保证前面的OpenGL命令立即执行(而不是让它们在缓冲区中等待)。其作用跟fflush(stdout)类似。
*/

小知识:

glRectf(-0.5f, -0.5f, 0.5f, 0.5f);  这个函数里面的参数,glRectf,画一个矩形。四个参数分别表示了位于对角线上的两个点的横、纵坐标。

在OpenGL中默认坐标体系与Windows 中常用的不同,Windows中常用的坐标体系(仅2D)是用户区的左上角为坐标原点,即(0.0,0.0)点,右为坐标轴的X轴正方向,下为Y轴正方向,OpenGL中的坐标轴(3D)默认以客户区中心点为坐标原点(0.0,0.0,0.0),右为坐标轴的X轴正方向,上为Y轴正方向,垂直指出屏幕的方向为Z轴正方向。长度定义是将客户区范围为按单位长度定义,即整个客户区恰好是(-1,-1)(左下)到(1,1)(右上)。因此以上述四个点为顶点的矩形刚好在窗口的正中间,占据窗口的 1/4 。

glVertex3f(-0.5, -0.5, 0.0);

glVertex3f(0.5, -0.5, 0.0);

glVertex3f(0.5, 0.5, 0.0);

glVertex3f(-0.5, 0.5, 0.0);

以上述四个点为顶点的矩形刚好充满了整个窗口

代码如下:

#include <GL/glut.h>
#include <gl/gl.h>

void  display()
{
     glClearColor(0.0,0.0,0.0,0.0);
     glClear(GL_COLOR_BUFFER_BIT);
     glColor4f(1.0,0.0,0.0,1.0);     // set the quad color
     glBegin(GL_QUADS);
         glVertex3f(-0.5,-0.5,0.0);
         glVertex3f(0.5,-0.5,0.0);
         glVertex3f(0.5,0.5,0.0);
         glVertex3f(-0.5,0.5,0.0);
    glEnd();
    glFlush();
}
int main(int argc, char** argv)
{
     glutInit(&argc, argv);
     glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
     glutInitWindowPosition(100, 100);
     glutInitWindowSize(400, 400);
     glutCreateWindow("第一个OpenGL程序");
     glutDisplayFunc(display);
     glutMainLoop();
     return 0;
}

 

 

 

时间: 2024-08-09 10:42:42

OpenGL编程-第一个程序-画出一个正方形的相关文章

如何在控制台下画出一个正线曲线

昨晚一个同学在网上找了一段傅里叶变换的代码,但是需要验证代码的正确性.于是就打算生成一个正弦波.他找到了我,代码本身是没有难度的,因为基本任何语言都有math库,库中肯定有三角函数.我当时想,能不能在Windows的控制台下画出一个正弦波.需要解决的问题只有一个,如何控制Console的光标位置.所幸的是,Windows提供了这样的API给我们使用.在windows.h的头文件中,有这样几个函数. HANDLE WINAPI GetStdHandle( _In_ DWORD nStdHandle

WPF Blend 脑洞大开的问题:如何用Blend得到或画出一个凹槽、曲面。

原文:WPF Blend 脑洞大开的问题:如何用Blend得到或画出一个凹槽.曲面. 目标图: 步骤一(放置一个矩形,填充蓝色): 步骤二(复制该矩形,并调整边角,填充粉红色): 第三部:让图形部分重合 第四部:蓝色图形将去粉红色图形,减去重叠部分 第五部:复制出另一个凹槽,等比放大,填充红色,让其与蓝色凹槽重合. 第六部:蓝色图形减去红色图形的重叠部分.制作完成. ? ? ? ? ? ? 原文地址:https://www.cnblogs.com/lonelyxmas/p/10768180.ht

场景上一个任意三角形,用程序画出任意一个顶点所在的高,三角形由程序在某一个范围内随机生成

解析: 1.题目解析:已知三角形三个顶点的坐标例如A(x1,y1),B(x2,y2),C(x3,y3),画出任意一个顶点的高线,所有必须求出高另一个点(这里我们叫H点)的坐标,然后两个点连成线. 2.逻辑解析:要计算出高线的垂直点的坐标必须用一个方程组. 3.原理解析:根据数学里面的知识,已知两个顶点(例如B.C)的坐标,即可计算出这两个点连成线的直线方程 y = kx + b:其中 k 指的是直线方程中的斜率,b是一个未知常数,因为知道B.C两点的坐标,所以可以计算出直线BC的直线方程, 那么

Android OpenGL ES: 第一个程序

1. 概要 OpenGL是桌面环境下的绘制,渲染三维图形的API. OpenGL ES是在Android环境下的OpenGL. 在Android中OpenGL需要在GLSurfaceView中渲染,渲染控制函数在GLSurfaceView.Renderer中.接下来会介绍如何创建第一个OpenGL程序 2. 配置AndroidManifest (1)声明OpenGL ES API <uses-feature android:glEsVersion="0x00020000" and

Python3 Tkinter基础 Canvas bind 绑定左键 鼠标左键点击时,在当前位置画出一个椭圆形

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: from tkinter import * root=Tk() w=Canvas(root,width=200,height=200,background='white') w.pack() def paint(event): #event.x 鼠标左键的横坐标

c语言代码编程题汇总: 求出一个随机数的阶乘,采用for循环实现

  求出一个随机数的阶乘,采用for循环实现 采用随机数的算法,程序更加灵活,程序代码如下: 1 /* 2 2017年3月5日10:10:46 3 功能:求出一个随机数的阶乘,采用for循环实现 4 */ 5 6 #include "stdio.h" 7 int main (void) 8 { 9 int i, n; 10 int m = 1; 11 12 printf ("请输入所求n的数值: "); 13 scanf ("%d",&n

WEB前端面试题 分别使用2个、3个、5个DIV画出一个大的红十字

[html] view plain copy <!DOCTYPE html> <!--两个DIV--> <html> <body> <div style="width:100%;height:200px;margin-top:500px;location:center;border:none;background-color:red;position:absolute"> </div> <div style=

使用CSS3画出一个叮当猫

原文出处: 郭锦荣 欢迎分享原创到伯乐头条 刚学习了这个案例,然后觉得比较好玩,就练习了一下.然后发现其实也不难,如果你经常使用PS或者Flash的话,应该就会知道画个叮当猫是很容易的事,至少我是这么觉得.但是,用CSS3画出来确实是第一次接触,所以很乐意去尝试一下,对于我这种菜鸟,确实是帮助不少,至少懂得如何去画一个简单的人物形象出来,再加上一些动画效果,就活了,那就更好玩了!OK,开始之前,先把效果图晒一下: PS:说实话,我觉得挺可爱的,小时候经常看多啦A梦,突然感觉很亲切,很童真,瞬间年

写给孩子的第一个程序:生成一个TXT口算题文件

学习中Python,孩子嚷嚷说让我给出口算题,于是写了一个生成口算题的程序,我自己觉得很简陋,盼大神们给修改,您的任何建议都是对我最大的鼓励! #!/usr/bin/env python from operator import add,sub,imulfrom random import randint,choice,uniformimport osops={'+':add,'-':sub,'*':imul} def FloatToInt(numList):           ‘把小数为零的