glut 显示 obj 模型

这篇博客主要介绍了如何在图形学作业中利用glut库加载.obj模型,并实现了基本的光照效果,但未涉及纹理映射。在main函数中展示了实现的流程,最终展示了一个蝴蝶模型的效果。同时,博主分享了程序源码和一些VRML模型资源供读者下载学习。
摘要由CSDN通过智能技术生成

图形学作业的最后一部分……


添加了光照, 但是没有纹理。


#ifndef SHOW_BY_GLUT_H_
#define SHOW_BY_GLUT_H_

#include <gl/glut.h>

#define max_point 1000000
#define max_face 1000000

float p[max_point][3];
int f[max_face][3];
int f_count;
int p_count;

// gl parameters
// Rotation amounts  
GLfloat xRot = 0.0f;  
GLfloat yRot = 0.0f; 

// mouse
int oldmy=-1,oldmx=-1;

// functions
void initializeMesh(float (*point)[3], int point_count, int (*face)[3], int face_count)
{
	f_count = face_count;
	p_count = point_count;

	for (int i = 0; i< p_count; i++)
	{
		for (int j = 0; j< 3; j++)
		{
			p[i][j] = point[i][j];
		}
	}

	for (int i = 0; i< f_count; i++)
	{
		for (int j = 0; j< 3; j++)
		{
			f[i][j] = face[i][j];
		}
	}
}

void calclater_normilize(float *a, float *b, float *c, float re[3])
{
	float vec1[3], vec2[3];
	for (int i =  0; i< 3; i++)
	{
		vec1[i] =b[i]-a[i];
	}
	for (int i =  0; i< 3; i++)
	{
		vec2[i] =c[i]-a[i];
	}

	re[0] = vec1[1]*vec2[2] - vec2[1]*vec1[2];
	re[1] = vec1[2]*vec2[0] - vec2[2]*vec1[0];
	re[2] = vec1[0]*vec2[1] - vec2[0]*vec1[1];

	float all = sqrt(re[0]*re[0]+re[1]*re[1]+re[2]*re[2]);
	for (int i = 0; i< 3; i++)
	{
		re[i] = re[i]/all;
	}
}

void drawTriangles()
{
	for (int i = 0; i< f_count; i++)
	{
		glBegin(GL_TRIANGLES);

		float nor[3];
		calclater_normilize(p[f[i][0]], p[f[i][1]], p[f[i][2]], nor);

		glNormal3f(nor[0], nor[1], nor[2]); 
		for (int j = 0; j< 3; j++)
		{
			int pindex = f[i][j];

			glVertex3f(p[pindex]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值