终于把桌子都搞定了(虽然还是有点丑?)算是把一开始想做的都做了吧
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