OpenGL实验(二三代码整理)桌子

本文整理了使用OpenGL进行桌子场景渲染的代码,包括table.h、render.cpp和event.cpp的实现细节,以及main.cpp中整合这些模块的过程,展示了OpenGL在3D图形绘制的应用。
摘要由CSDN通过智能技术生成
终于把桌子都搞定了(虽然还是有点丑?)算是把一开始想做的都做了吧

table.h

//@author Birdy&C 2017.4.7
#pragma once
#define GLUT_DISABLE_ATEXIT_HACK
#include <stdio.h>
#include<windows.h>
#include <gL\GLAUX.H>
#include <gl\GLUT.H>  

//函数声明

//===========main.cpp============//

void init();

//===========event.cpp============//
void timer(int p);
void mouse(int button, int state, int x, int y);
void motion(int x, int y);
void special(int key, int x, int y);
void keyboard(unsigned char key, int x, int y);
void setProjection(int width, int height);
void reshape(int w1, int h1);

//===========render.cpp============//
AUX_RGBImageRec *LoadBMP(CHAR *Filename); 
int LoadGLTextures();
void Draw_Leg();
void Draw_Table();
void drawMain();
void renderScene(); 
void renderScenesw1();
void renderScenesw2(); 
void renderScenesw3();
void renderSceneAll();



//全局变量

extern bool mouseisdown, loopr;
extern int mainWindow, subWindow1, subWindow2, subWindow3, rx, ry, rz, tx, ty, w, h;
extern int time, state;
extern const int border;
extern float  mx, mz;
extern GLuint  texture[1]; 

render.cpp

// render.cpp : 绘制函数
//@author Birdy&C 2017.4.7

#include "table.h"


AUX_RGBImageRec *LoadBMP(CHAR *Filename)    // 载入位图图象
{
    FILE *File = NULL;                      // 文件句柄
    int check;
    if (!Filename)                          // 确保文件名已提供
    {
        return NULL;                        // 如果没提供,返回 NULL
    }
    check = fopen_s(&File, Filename, "r");      // 尝试打开文件
    if (check == 0)                             // 文件存在
    {
        fclose(File);                           // 关闭句柄
        return auxDIBImageLoadA(Filename);      // 载入位图并返回指针
    }
    return NULL;                                // 如果载入失败,返回 NULL
}

int LoadGLTextures()         // 载入位图(调用上面的代码)并转换成纹理
{
    int Status = FALSE;                             // 状态指示器
    AUX_RGBImageRec *TextureImage[1];               // 创建纹理的存储空间
    memset(TextureImage, 0, sizeof(void *) * 1);    // 将指针设为 NULL
    TextureImage[0] = LoadBMP("wood.bmp");          // 载入位图,检查有无错误,如果位图没找到则退出

    if (NULL != TextureImage[0])
    {
        Status = TRUE;                              // 将 Status 设为 TRUE
        printf("LOAD SUCCESS\n");
        glGenTextures(1, &texture[0]);              // 创建纹理

        glBindTexture(GL_TEXTURE_2D, texture[0]);   // 使用来自位图数据生成 的典型纹理

        // 生成纹理
        glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);

        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // 线形滤波
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // 线形滤波
    }

    if (TextureImage[0])                    // 纹理是否存在
    {
        if (TextureImage[0]->data)          // 纹理图像是否存在
        {
            free(TextureImage[0]->data);    // 释放纹理图像占用的内存
        }
        free(TextureImage[0]);              // 释放图像结构
    }
    return Status;                          // 返回 Status
}

void Draw_Leg() // This function draws a triangle with RGB colors
{
    //四面
    glBegin(GL_QUADS);

    glTexCoor
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
实验OpenGL+GLUT开发平台搭建 5 小实验1: 开发环境设置 5 小实验2: 控制窗口位置和大小 6 小实验3:默认的可视化范围 6 小实验4:自定义可视化范围 7 小实验5: 几何对象变形的原因 8 小实验6: 视口坐标系及视口定义 8 小实验7:动态调整长宽比例,保证几何对象不变形 9 实验二 动画和交互 10 小实验1: 单缓冲动画技术 10 小实验2: 双缓冲动画技术 11 小实验3:键盘控制 13 小实验4:鼠标控制【试着单击鼠标左键或者右键,试着按下鼠标左键后再移动】 14 实验三 几何变换、观察变换、三维对象 16 小实验1:二维几何变换 16 小实验2:建模观察(MODELVIEW)矩阵堆栈 17 小实验3:正平行投影1 19 小实验4:正平行投影2 19 小实验5:正平行投影3 20 小实验6:透射投影1 21 小实验6:透射投影2 22 小实验7:三维对象 24 实验四 光照模型和纹理映射 26 小实验1:光照模型1----OpenGL简单光照效果的关键步骤。 26 小实验2:光照模型2----光源位置的问题 28 小实验3:光照模型3----光源位置的问题 31 小实验4:光照模型4----光源位置的问题 33 小实验5:光照模型5----光源位置的问题 35 小实验6:光照模型6----光源位置的问题 38 小实验7:光照模型7----光源位置的动态变化 40 小实验8:光照模型8----光源位置的动态变化 43 小实验9:光照模型9---光源位置的动态变化 45 小实验10:光照模型10---聚光灯效果模拟 48 小实验11:光照模型11---多光源效果模拟 50 小实验12:光照效果和雾效果的结合 53 小实验13:纹理映射初步—掌握OpenGL纹理映射的一般步骤 56 小实验13:纹理映射—纹理坐标的自动生成(基于参数的曲面映射) 59 小实验14:纹理映射—纹理坐标的自动生成(基于参考面距离) 61
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值