上一节写了简单的立体绘制,相信大家也可以绘制很多种立体图形了。接下来要讲的是纹理贴图,说到纹理贴图,相信随便百度下就一大把,不过大多都是2D平面贴图。说到这肯定有人要说了,纹理贴图不就只支持平面2D吗?各位息怒,把刀先放下!且听我慢慢道来。

我记得我原来学习纹理的时候,百度一下到处都是,照着弄一下也很顺,可是出来就是个平面图片。我心想,我们要做的是3D啊,怎么一直教我在平面上搞,作为小白的我,那时候也是很郁闷的。郁闷久了反而想通了:我画立体图形的时候不也是一个面一个面的画吗?那我就一个面一个面的贴图不就好了?跟着这个想法,我开始了探索。

按照上一节的代码基础,我在界面加载时先加入一张图片:

            Bitmap _bitmap = new Bitmap("D:\\Red墙.jpg");BitmapData bitmapData = _bitmap.LockBits(new Rectangle(0, 0, _bitmap.Width, _bitmap.Height),ImageLockMode.ReadOnly,System.Drawing.Imaging.PixelFormat.Format32bppArgb);

然后绑定到纹理:

            GL.GenTextures(1, out TextureID);GL.BindTexture(TextureTarget.Texture2D, TextureID);GL.TexImage2D(TextureTarget.Texture2D,0,PixelInternalFormat.Rgba,bitmapData.Width,bitmapData.Height,0,OpenTK.Graphics.OpenGL.PixelFormat.Bgra,PixelType.UnsignedByte,bitmapData.Scan0);_bitmap.UnlockBits(bitmapData);GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);

接下来就是绘图部分了:

            GL.Enable(EnableCap.Texture2D);int sides = 40;float radius = 1;Vector3[] Points = new Vector3[sides + 1];for (int i = 0; i < sides + 1; i++){Points[i].X = radius * (float)Math.Cos(- Math.PI + i * 2 * Math.PI / sides);Points[i].Y = radius * (float)Math.Sin(-Math.PI + i * 2 * Math.PI / sides);Points[i].Z = 0;}GL.Begin(BeginMode.Quads);for (int i = 0; i < sides; i++){GL.TexCoord2((float)i / sides, 1);GL.Vertex3(Points[i]);GL.Normal3(Vector3d.Normalize(new Vector3d(Points[i].X, Points[i].Y, 0)));GL.TexCoord2((float)i / sides, 0);GL.Vertex3(Points[i] + new Vector3(0, 0, 3));GL.Normal3(Vector3d.Normalize(new Vector3d(Points[i].X, Points[i].Y, 0)));GL.TexCoord2((float)(i + 1) / sides, 0);GL.Vertex3(Points[i + 1] + new Vector3(0, 0, 3));GL.Normal3(Vector3d.Normalize(new Vector3d(Points[i + 1].X, Points[i + 1].Y, 0)));GL.TexCoord2((float)(i + 1) / sides, 1);GL.Vertex3(Points[i + 1]);GL.Normal3(Vector3d.Normalize(new Vector3d(Points[i + 1].X, Points[i + 1].Y, 0)));}GL.End();GL.Disable(EnableCap.Texture2D);

这边是绘制的一个圆柱侧面上的贴图,把侧面分成了无数块小长方形,然后按照比例把每一小块图片贴上。

效果:

结尾:不明白的童鞋可以举手啊,在下方评论,看到必回。另外,如果有大佬看到的话希望可以不吝赐教。

OpenTK探索二:立体纹理贴图相关推荐

  1. VTK笔记-纹理贴图-vtkTexture类

    纹理贴图   计算机图形学中的纹理既包括通常意义上物体表面的纹理即使物体表面呈现凹凸不平的沟纹,同时也包括在物体的光滑表面上的彩色图案,通常我们更多地称之为花纹.对于花纹而言,就是在物体表面绘出彩色花 ...

  2. OpenGL(二十二) gluBuild2DMipmaps 加载Mip纹理贴图

    当纹理被用于渲染一个面积比它本身小很多的对象时,会由于纹理图像的降采样率不足而导致混叠现象,主要的表现特征是纹理图像的闪烁,出现纹理躁动.特别是在场景远近移动变换时,这种闪烁情况更为明显,严重可能会影 ...

  3. 【转载】【《Real-Time Rendering 3rd》 提炼总结】(五) 第六章 · 纹理贴图及相关技术 The Texturing

    本文由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://blog.csdn.net/poem_qianmo/article/details/73718109 在计算机图形学中,纹理 ...

  4. zb如何导出自己画的_zbrush纹理贴图(zbrush怎么导出映射贴图)

    ZBrush中贴图纹理怎么画不出来了? ZBrush3.0可以直接绘制纹理贴图或者颜色贴图,但是在使用中不会直接反映到纹理贴图窗口了,所以有 朋友说没有办法导出纹理贴图.实际只要按颜色到纹理按钮就可以 ...

  5. opengl es纹理贴图效果实例

    一.先准备好一张用来贴图的照片 二.纹理效果代码: gl.glEnable(GL10.GL_TEXTURE_2D);// 创建纹理gl.glGenTextures(1, textureids, 0); ...

  6. 【光线追踪系列十一】纹理贴图

    本文主要参照 Ray Tracing: The Next Week,其中只是主要精炼光追相关理论,具体实现可参照原文. 一.纹理实现 实现之前,你应该已经充分理解了[光线追踪系列六]反射与金属类特性. ...

  7. opengl生成图片php,(转)使用OpenGL显示图像(七)Android OpenGLES2.0——纹理贴图之显示图片...

    转:http://blog.csdn.net/junzia/article/details/52842816 前面几篇博客,我们将了Android中利用OpenGL ES 2.0绘制各种形体,并在上一 ...

  8. 基于VC++的3D地形绘制与纹理贴图

    前言 随着地理信息系统产业的发展,三维产品也在生活中处处吸引着我们的眼球.作为数字城市的核心内容,城市模型的构建成为了目前研究的热点.OpenGL是独立于操作系统和硬件环境的三维图形库,其为实现逼真的 ...

  9. 【threeJS】纹理贴图

    纹理贴图设置 //镜面处理 texture.flipY=false; //边缘处理 texture.wrapS = texture.wrapT = THREE.RepeatWrapping; 加载纹理 ...

  10. openCV读入图片,openGL实现纹理贴图

    本文结合结合openCV,openGL的优点,实现混合编程. (1)OpenCV提供图形处理和计算机视觉方面的通用算法,读入二维图片很方便: (2)OpenGL是跨平台的图形程序接口,它用于二维,三维 ...

最新文章

  1. 成功解决 \tensorflow\…\datasets\mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.lea
  2. bitbucket初次使用
  3. 领域应用 | 中医临床术语系统
  4. 黑客借“甲型流感”传毒 挂马疾病预防控制中心网站
  5. 【图像处理】MATLAB:图像分割
  6. 新装好SQL2005时SA无法登陆的解决办法
  7. jpg如何免费转换成pdf
  8. 在Ubuntu16.04上安装QQ
  9. linux vi恢复文件怎么打开文件,Linux上vi编辑文件非正常退出后文件恢复
  10. xor命令,运算优先级,Matlab计算规则(从左至右),舍入误差,取整函数、求余函数和符号函数,mod和rem的区别
  11. Java SE 070 Retention及RetentionPolicy详解
  12. 【P5385】【Cnoi2019】须臾幻境(LCT)
  13. 计算机打字训练教学教案,打字练习小游戏教案.doc
  14. 42条微信营销小技巧!
  15. 平方逼近matlab,MATLAB上机实验——最佳平方逼近
  16. AVX指令集是什么?(Advanced Vector Extensions 高级向量扩展)
  17. 创建多线程有几种方法?如何创建线程?
  18. AWS DynamoDB 常用操作
  19. 百度算法最新更新介绍之烽火算法
  20. 国内黑客组织及代表性人物

热门文章

  1. SQL进阶篇之多表联查
  2. java开源物联网_JetLinks开源物联网平台源码 v1.8.0
  3. vue代码查重(任意格式文件)
  4. 删除字符串中多余的空格 美团校园招聘模拟测试题
  5. 优秀的博客地址-冰冻三尺非一日之寒
  6. 《计算机网络》读书笔记
  7. WEB服务器的配置与管理
  8. 安卓手机作为文件共享服务器,安卓手机的文件共享应该怎么操作?
  9. usage.txt-2
  10. 链表(Linked List)的C语言实现