`
tiankefeng0520
  • 浏览: 146743 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

OpenGL学习四十:正玄移动

 
阅读更多

正玄波浪曲线的特点是一个周期在x(0-360°)之间,y在(-1,+1)之间移动
其中y=sinx
假定移动一个周期X变化位置0~10,Y的变化位置5~-5,那么可推断出
X=(10-0)/360.0*a 其中a代表角度
Y=sin(a)*5/1

关于C++函数库中算数公式的使用
SIN(弧度)
弧度=PI/180.0f*a 其中a代表角度

 

\

#include "header.h"

GLuint	texture[1];			
#define PI 3.141592654

float quar=1.0f;


AUX_RGBImageRec *LoadBMP(char *Filename)               
{
	FILE *File=NULL;                                

	if (!Filename)                               
	{
		return NULL;                            
	}

	File=fopen(Filename,"r");                      

	if (File)                                      
	{
		fclose(File);                           
		return auxDIBImageLoad(Filename);       
	}
	return NULL;                                 
}

int LoadGLTextures()                                
{
	int Status=FALSE;                              

	AUX_RGBImageRec *TextureImage[1];               

	memset(TextureImage,0,sizeof(void *)*1);        


	if (TextureImage[0]=LoadBMP("Data/Star.bmp"))
	{
		Status=TRUE;                            

		glGenTextures(1, &texture[0]);          

		
		glBindTexture(GL_TEXTURE_2D, texture[0]);
		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
		glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
	}
	if (TextureImage[0])                          
	{
		if (TextureImage[0]->data)              
		{
			free(TextureImage[0]->data);    
		}

		free(TextureImage[0]);                 
	}

	return Status;                                  
}
void ReSizeGLScene(GLsizei width, GLsizei height)		
{
	if (height==0)										
	{
		height=1;									
	}

	glViewport(0,0,width,height);						

	glMatrixMode(GL_PROJECTION);					
	glLoadIdentity();									

	// Calculate The Aspect Ratio Of The Window
	gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);

	glMatrixMode(GL_MODELVIEW);							
	glLoadIdentity();								
}

int InitGL(void)										
{

	if (!LoadGLTextures())								
	{
		return FALSE;							
	}

	glShadeModel(GL_SMOOTH);							
	glClearColor(0.0f, 0.0f, 0.0f, 1.0f);			
	glClearDepth(1.0f);									

	glBlendFunc(GL_SRC_ALPHA,GL_ONE);			
	glEnable(GL_BLEND);
	glEnable(GL_TEXTURE_2D);
	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);	
	return TRUE;										
}


void DrawGLScene(void)									
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);	
	glBindTexture(GL_TEXTURE_2D, texture[0]);			
	glLoadIdentity();	
	glTranslatef(-8.0f,0.0f,-30.0f);	

	float y=sin(PI/180.0f*quar)*4.0f;
	float x=quar*16.0f/360.0f;
	
	glTranslatef(x,y,0.0f);
	glRotatef(quar,1.0f,1.0f,1.0f);

		glBegin(GL_QUADS);
		glColor4ub(rand()%256,rand()%256,rand()%256,255);
		glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);
		glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);
		glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);
		glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);
		// Back Face
		glColor4ub(rand()%256,rand()%256,rand()%256,255);
		glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
		glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);
		glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);
		glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
		// Top Face
		glColor4ub(rand()%256,rand()%256,rand()%256,255);
		glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);
		glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,  1.0f,  1.0f);
		glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,  1.0f,  1.0f);
		glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);
		// Bottom Face
		glColor4ub(rand()%256,rand()%256,rand()%256,255);
		glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
		glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
		glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);
		glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);
		// Right face
		glColor4ub(rand()%256,rand()%256,rand()%256,255);
		glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
		glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);
		glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);
		glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);
		// Left Face
		glColor4ub(rand()%256,rand()%256,rand()%256,255);
		glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
		glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);
		glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);
		glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);
		glEnd();

	glFlush();
}


void rotate()
{
	quar++;

	if(quar>720.0f)
	{
		quar=0.0f;
	}

	glutPostRedisplay();
}
void keyboard(unsigned char key,int x,int y)
{
	switch (key)
	{

	case 'S':
		glutIdleFunc(rotate);
		break;
	case 'R':
		glutIdleFunc(NULL);
		break;
	}

}


int main(int argc,char **argv)
{
	glutInit(&argc,argv);
	glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);
	glutInitWindowSize(800,600);
	glutInitWindowPosition(100,100);
	glutCreateWindow("正玄移动");
	InitGL();
	glutDisplayFunc(DrawGLScene);
	glutKeyboardFunc(keyboard);
	glutReshapeFunc(ReSizeGLScene);
	glutMainLoop();
}

 

  • 大小: 14.2 KB
分享到:
评论

相关推荐

    OpenGL茶壶模拟正弦曲线波动

    总的来说,"OpenGL茶壶模拟正弦曲线波动"是一个结合了计算机图形学、数学和编程技术的实践项目,旨在展示OpenGL的强大功能和灵活性,同时也提供了学习3D图形编程的好例子。通过研究和理解这个项目,开发者可以深化对...

    OPENGL画矩形动画

    本主题聚焦于如何使用OpenGL实现一个矩形动画,其中矩形会不断地移动,并在碰到边界时自动反弹,改变运动方向。 首先,我们需要了解OpenGL的基本概念。OpenGL是一个跨语言、跨平台的编程接口,它提供了大量用于绘制...

    opengl.rar_opengl_opengl 圆柱面_opengl 旋转_opengl 曲面函数_正弦函数曲面

    在这个"opengl.rar"压缩包中,我们可以看到一系列与OpenGL相关的知识,特别是关于圆柱面、旋转、曲面函数以及正弦函数曲面的实现。 首先,让我们深入了解一下圆柱面在OpenGL中的构建。在OpenGL中,创建几何形状通常...

    OpenGL实现抖动技术,场景很炫哦

    在这个案例中,抖动被应用到图像的移动上,使得图片不是简单地平滑移动,而是按照正弦波的规律上下或左右摇摆,增加了视觉的动感和趣味性。 首先,理解正弦波的概念是至关重要的。正弦波是一种周期性连续函数,通常...

    openGL水波模拟动画

    通过对这些文件的分析和学习,我们可以深入了解OpenGL水波模拟动画的实现细节,包括如何创建和更新纹理,如何编写高效的着色器,以及如何使用OpenGL特性来增强视觉效果。对于想要深入学习OpenGL图形编程或者游戏开发...

    OpenGL之利用矩阵的平移、旋转、综合变换等实现矩形的移动.zip

    本资料包"OpenGL之利用矩阵的平移、旋转、综合变换等实现矩形的移动.zip"深入探讨了这些概念,并涉及到了移动过程中矩形的碰撞检测。 首先,让我们理解矩阵在OpenGL中的作用。矩阵是数学工具,可以用来表示和执行...

    opengl图形图像处理实现 水中涟漪的模拟效果

    1. **顶点着色器**:OpenGL中的顶点着色器负责处理图形的顶点数据,可以用来移动或变形顶点,模拟水面的起伏。 2. **片段着色器**:在顶点着色器处理后的像素阶段,片段着色器可以计算每个像素的颜色,模拟水面的...

    opengles多重纹理与过程纹理

    OpenGL ES(Open Graphics Library for Embedded Systems)是OpenGL的精简版本...通过研究这些资源,你可以深入学习如何在OpenGL ES环境中实现这两种纹理技术,并应用于自己的项目中,创建出更为丰富多样的3D图形效果。

    opengles特效之飘扬的旗帜

    OpenGL ES(OpenGL for Embedded Systems)是OpenGL的一个精简版本,专为嵌入式设备如智能手机、平板电脑等设计,用于2D和3D图形渲染。在"opengles特效之飘扬的旗帜"这个主题中,我们将探讨如何利用OpenGL ES实现...

    opengles2.0 Animation

    OpenGL ES 2.0 是移动设备和嵌入式系统中广泛使用的图形库,用于渲染2D和3D图像。在“opengles2.0 Animation”这个主题中,我们将深入探讨如何利用OpenGL ES 2.0实现动画效果,特别是方波图的绘制以及模拟加速和减速...

    android opengl es 飘动的国旗

    7. 根据正弦曲线求出各点的深度,这个方法并不难写,但是在实现的时候,由于把顶点的顺序计算的有一点问题,画出来的图形在移动时不是按照正弦曲线的规律,使得波动的规律看起来极不自然,后来把顶点的计算改正后,...

    OpenGL ES中的平面圆绘制与贴图

    OpenGL ES 是一种嵌入式图形库,用于在嵌入式设备上进行2D和3D图形渲染。在OpenGL ES中,没有内置的函数可以直接绘制出平面的圆形,因此需要通过编程方式实现。本文将深入探讨如何在OpenGL ES中实现平面圆的绘制以及...

    OpenGL小例子

    总的来说,这个OpenGL小例子提供了一个实践性的学习平台,涵盖了OpenGL的基本用法、用户界面集成、游戏编程概念以及如何通过源码学习实际编程技巧。对于想要进入3D图形编程领域的开发者来说,这是一个非常有价值的...

    基于对话框的正弦余弦曲线的绘制

    在正弦和余弦函数中,改变相位会使得波形沿x轴移动。当相位为0时,正弦和余弦曲线分别从原点开始。增加相位会使曲线向右移动,减少相位则向左移动。 5. **图形用户界面(GUI)**:在这个程序中,用户通过对话框与之...

    snowstorm3.zip,lissajous.zip,rectflurry2.zip

    OpenGL是一种强大的图形编程接口,广泛应用于游戏开发、科学可视化、工程设计等领域。...通过分析和学习这些案例,我们可以深入理解OpenGL的工作原理,以及如何有效地利用它来创建高性能的图形应用程序。

    moving waves_opengl_visualstudio_waves_

    OpenGL是计算机图形学中的一个强大库,用于在各种操作系统上创建和操纵2D和3D图形。Visual Studio是一个广泛使用的集成开发环境(IDE),支持多种编程语言,包括C++,这是编写OpenGL应用的常用语言。"Moving Waves...

    绘制正弦曲线

    5. **绘制曲线**:在OnDraw函数中,使用MoveTo移动画笔到(0, 0)(假设这是x轴和y轴的交叉点),然后通过一系列LineTo函数将点连接起来,形成曲线。每个点的坐标是计算得到的(x, sin(x))。 6. **刷新和响应**:确保...

    Android OpenGL ES绘制一个球体.doc

    在Android平台上,OpenGL ES是一个广泛使用的图形库,用于在移动设备上实现高性能的3D图形渲染。本篇将深入探讨如何使用OpenGL ES绘制一个球体。球体在计算机图形学中是一个基本的几何形状,通常通过一系列三角形来...

    android 示波器

    在Android平台上开发一个示波器小程序,可以展示正弦和余弦信号,是将嵌入式计算和可视化技术应用于移动设备的一个典型实例。这个小程序利用Android系统的强大功能,为用户提供实时信号显示,使得用户能够在手机或...

    infinity:玩正弦波

    【描述】:“无限”暗示了该项目可能涉及到无限循环或者无限滚动的正弦波图案,同时提到了“学分”,这可能意味着它是一个学习项目,鼓励用户参与并提供贡献。提到的“找我 @”,可能是指作者提供了联系方式,以便...

Global site tag (gtag.js) - Google Analytics