首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

opengl 怎么修改纹理的值

2012-04-13 
opengl 如何修改纹理的值用opengl来处理图片,把图片做为纹理来显示,如何来修改纹理的值,比如我要做图像的

opengl 如何修改纹理的值
用opengl来处理图片,把图片做为纹理来显示,如何来修改纹理的值,比如我要做图像的梯度运算
读取纹理代码如下:

C/C++ code
#pragma once   #include "stdafx.h"   #include "template.h"     #include <gl/GL.h>   #include <gl/GLU.h>   #include <gl/glut.h>   #include <gl\glaux.h>    #pragma comment( lib, "opengl32.lib" )   #pragma comment( lib, "glu32.lib" )   #pragma comment( lib, "glaux.lib" )   GLfloat xrot;               // X Rotation ( NEW )   GLfloat yrot;               // Y Rotation ( NEW )   GLfloat zrot;               // Z Rotation ( NEW )       GLuint  texture[1];         // Storage For One Texture ( NEW )     AUX_RGBImageRec *LoadBMP(char *Filename)                // Loads A Bitmap Image   {      FILE *File=NULL;                                    // File Handle         if (!Filename)                                      // Make Sure A Filename Was Given       {          return NULL;                                    // If Not Return NULL       }        File=fopen(Filename,"r");                           // Check To See If The File Exists         if (File)                                           // Does The File Exist?       {          fclose(File);                                   // Close The Handle           return auxDIBImageLoadA(Filename);              // Load The Bitmap And Return A Pointer       }        return NULL;                                        // If Load Failed Return NULL   }    int LoadGLTextures()                                    // Load Bitmaps And Convert To Textures   {      int Status=FALSE;                                   // Status Indicator         AUX_RGBImageRec *TextureImage[1];                   // Create Storage Space For The Texture         memset(TextureImage,0,sizeof(void *)*1);            // Set The Pointer To NULL         // Load The Bitmap, Check For Errors, If Bitmap's Not Found Quit       if (TextureImage[0]=LoadBMP("Data/NeHe.bmp"))      {          Status=TRUE;                                    // Set The Status To TRUE             glGenTextures(1, &texture[0]);                  // Create The Texture             // Typical Texture Generation Using Data From The Bitmap           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 Texture Exists       {          if (TextureImage[0]->data)                           // If Texture Image Exists           {              free(TextureImage[0]->data);                 // Free The Texture Image Memory           }            free(TextureImage[0]);                              // Free The Image Structure       }        return Status;                                      // Return The Status   }  


[解决办法]
我从来不读别人的程序,因为大部分程序太弱智了。
关于“用opengl来处理图片,把图片做为纹理来显示,如何来修改纹理的值,比如我要做图像的梯度运算”,原理很简单,显示一个面,把纹理贴上去,在像素着色器中,进行相关处理。

如果有些功能不能实现,你也可以实施cuda。

[解决办法]
指针TextureImage[0]里面不就存着吗?

热点排行