OpenGL纹理贴图简单例子

OpenGL纹理贴图简单例子
OpenGL纹理贴图简单例子

【代码】

#include

#include

#include

staticdouble X = 0;

staticdouble Y = 0;

staticdouble Z = 7;

// 定义函数指针,在Windows环境下使用OpenGL扩展PFNGLACTIVETEXTUREARBPROC glActiveTextureARB = NULL; PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB = NULL;

// 纹理存储数组

static GLubyte T0[64][64][4];

static GLubyte T1[64][64][4];

static GLubyte T2[64][64][4];

// 纹理名字

static GLuint Tname0;

static GLuint Tname1;

static GLuint Tname2;

// 创建纹理

void makeImages()

{

int i, j, c;

// 第一个纹理,渐变绿色,*64

for (i = 0; i < 64; i++) {

for (j = 0; j < 64; j++) {

T0[i][j][0] = (GLubyte) 0;

T0[i][j][1] = (GLubyte) i * 5 + j * 5;

T0[i][j][2] = (GLubyte) 0;

T0[i][j][3] = (GLubyte) 255;

}

}

// 第二个纹理,黑白相间横条,*64

for (i = 0; i < 64; i++) {

for (j = 0; j < 64; j++) {

if (i % 16 < 8) c = 255;

else c = 0;

T1[i][j][0] = (GLubyte) c;

T1[i][j][1] = (GLubyte) c;

T1[i][j][2] = (GLubyte) c;

T1[i][j][3] = (GLubyte) 255;

}

}

// 第三个纹理,黑白相间竖条,*64

for (i = 0; i < 64; i++) {

for (j = 0; j < 64; j++) {

if (j % 16 < 8) c = 255;

else c = 0;

T2[i][j][0] = (GLubyte) c;

T2[i][j][1] = (GLubyte) c;

T2[i][j][2] = (GLubyte) c;

T2[i][j][3] = (GLubyte) 255;

}

}

}

void init()

{

// 获取函数地址

glActiveTextureARB =

(PFNGLACTIVETEXTUREARBPROC)wglGetProcAddress("glActiveTextureARB");

glMultiTexCoord2fARB =

(PFNGLMULTITEXCOORD2FARBPROC)wglGetProcAddress("glMultiTexCoord2fARB");

// 场景初始化

glClearColor (0.0, 0.0, 0.0, 0.0);

glShadeModel(GL_FLAT);

glEnable(GL_DEPTH_TEST);

makeImages(); // 纹理初始化

glPixelStorei(GL_UNPACK_ALIGNMENT, 1); // 对其像素字节

glGenTextures(1, &Tname0); // 获取纹理名字

glGenTextures(1, &Tname1); // 获取纹理名字

glGenTextures(1, &Tname2); // 获取纹理名字

// 初始化纹理

glBindTexture(GL_TEXTURE_2D, Tname0); // 生成指定名字的纹理对象

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 64, 64, 0, GL_RGBA, GL_UNSIGNED_BYTE, T0); // 设

置纹理对象内容

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); // 设置纹理过滤方式

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); // 设置纹理过滤方式

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // 设置纹理过滤方式glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // 设置纹理过滤方式

// 同上,初始化纹理

glBindTexture(GL_TEXTURE_2D, Tname1);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 64, 64, 0, GL_RGBA, GL_UNSIGNED_BYTE, T1);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

// 同上,初始化纹理

glBindTexture(GL_TEXTURE_2D, Tname2);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 64, 64, 0, GL_RGBA, GL_UNSIGNED_BYTE, T2);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

}

void display()

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glLoadIdentity();

gluLookAt((GLfloat)X, (GLfloat)Y, (GLfloat)Z, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); // 视图变换

// 激活纹理对象

glActiveTextureARB (GL_TEXTURE0_ARB); // 选中号纹理

glEnable(GL_TEXTURE_2D); // 使纹理可用

glBindTexture(GL_TEXTURE_2D, Tname0); // 激活纹理

glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); // 设置纹理贴图方式

// 绘制正方形

glBegin(GL_QUADS);

glMultiTexCoord2fARB (GL_TEXTURE0_ARB, 0.0, 0.0);

glVertex3f(-4.0, 1.5, 0.0);

glMultiTexCoord2fARB (GL_TEXTURE0_ARB, 0.0, 1.0);

glVertex3f(-4.0, 3.5, 0.0);

glMultiTexCoord2fARB (GL_TEXTURE0_ARB, 1.0, 1.0);

glVertex3f(-2.0, 3.5, 0.0);

glMultiTexCoord2fARB (GL_TEXTURE0_ARB, 1.0, 0.0);

glVertex3f(-2.0, 1.5, 0.0);

glEnd();

glDisable(GL_TEXTURE_2D);

// 同上,绘制正方形,使用号纹理

glActiveTextureARB (GL_TEXTURE1_ARB);

glEnable(GL_TEXTURE_2D);

glBindTexture(GL_TEXTURE_2D, Tname1);

glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

glBegin(GL_QUADS);

glMultiTexCoord2fARB (GL_TEXTURE1_ARB, 0.0, 0.0);

glVertex3f(-1.0, 1.5, 0.0);

glMultiTexCoord2fARB (GL_TEXTURE1_ARB, 0.0, 1.0);

glVertex3f(-1.0, 3.5, 0.0);

glMultiTexCoord2fARB (GL_TEXTURE1_ARB, 1.0, 1.0);

glVertex3f(1.0, 3.5, 0.0);

glMultiTexCoord2fARB (GL_TEXTURE1_ARB, 1.0, 0.0);

glVertex3f(1.0, 1.5, 0.0);

glEnd();

glDisable(GL_TEXTURE_2D);

// 同上,绘制正方形,使用号纹理

glActiveTextureARB(GL_TEXTURE2_ARB);

glEnable(GL_TEXTURE_2D);

glBindTexture(GL_TEXTURE_2D, Tname2);

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

glBegin(GL_QUADS);

glMultiTexCoord2fARB (GL_TEXTURE2_ARB, 0.0, 0.0);

glVertex3f(2.0, 1.5, 0.0);

glMultiTexCoord2fARB (GL_TEXTURE2_ARB, 0.0, 1.0);

glVertex3f(2.0, 3.5, 0.0);

glMultiTexCoord2fARB (GL_TEXTURE2_ARB, 1.0, 1.0);

glVertex3f(4.0, 3.5, 0.0);

glMultiTexCoord2fARB (GL_TEXTURE2_ARB, 1.0, 0.0);

glVertex3f(4.0, 1.5, 0.0);

glEnd();

glDisable(GL_TEXTURE_2D);

// 同上,绘制正方形,使用号和号纹理

glActiveTextureARB (GL_TEXTURE0_ARB);

glEnable(GL_TEXTURE_2D);

glBindTexture(GL_TEXTURE_2D, Tname0);

glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glActiveTextureARB (GL_TEXTURE1_ARB);

glEnable(GL_TEXTURE_2D);

glBindTexture(GL_TEXTURE_2D, Tname1);

glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

glBegin(GL_QUADS);

glMultiTexCoord2fARB (GL_TEXTURE0_ARB, 0.0, 0.0); glMultiTexCoord2fARB (GL_TEXTURE1_ARB, 0.0, 0.0);

glVertex3f(-2.5, -1.0, 0.0);

glMultiTexCoord2fARB (GL_TEXTURE0_ARB, 0.0, 1.0); glMultiTexCoord2fARB (GL_TEXTURE1_ARB, 0.0, 1.0);

glVertex3f(-2.5, 1.0, 0.0);

glMultiTexCoord2fARB (GL_TEXTURE0_ARB, 1.0, 1.0); glMultiTexCoord2fARB (GL_TEXTURE1_ARB, 1.0, 1.0);

glVertex3f(-0.5, 1.0, 0.0);

glMultiTexCoord2fARB (GL_TEXTURE0_ARB, 1.0, 0.0); glMultiTexCoord2fARB (GL_TEXTURE1_ARB, 1.0, 0.0);

glVertex3f(-0.5, -1.0, 0.0);

glEnd();

// 反激活纹理,防止干扰

glActiveTextureARB (GL_TEXTURE0_ARB);

glDisable(GL_TEXTURE_2D);

glActiveTextureARB (GL_TEXTURE1_ARB);

glDisable(GL_TEXTURE_2D);

// 同上,绘制正方形,使用号和号纹理

glActiveTextureARB (GL_TEXTURE1_ARB);

glEnable(GL_TEXTURE_2D);

glBindTexture(GL_TEXTURE_2D, Tname1);

glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glActiveTextureARB (GL_TEXTURE2_ARB);

glEnable(GL_TEXTURE_2D);

glBindTexture(GL_TEXTURE_2D, Tname2);

glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

glBegin(GL_QUADS);

glMultiTexCoord2fARB (GL_TEXTURE1_ARB, 0.0, 0.0); glMultiTexCoord2fARB (GL_TEXTURE2_ARB, 0.0, 0.0);

glVertex3f(0.5, -1.0, 0.0);

glMultiTexCoord2fARB (GL_TEXTURE1_ARB, 0.0, 1.0); glMultiTexCoord2fARB (GL_TEXTURE2_ARB, 0.0, 1.0);

glVertex3f(0.5, 1.0, 0.0);

glMultiTexCoord2fARB (GL_TEXTURE1_ARB, 1.0, 1.0);

glMultiTexCoord2fARB (GL_TEXTURE2_ARB, 1.0, 1.0);

glVertex3f(2.5, 1.0, 0.0);

glMultiTexCoord2fARB (GL_TEXTURE1_ARB, 1.0, 0.0); glMultiTexCoord2fARB (GL_TEXTURE2_ARB, 1.0, 0.0);

glVertex3f(2.5, -1.0, 0.0);

glEnd();

glActiveTextureARB (GL_TEXTURE1_ARB);

glDisable(GL_TEXTURE_2D);

glActiveTextureARB (GL_TEXTURE2_ARB);

glDisable(GL_TEXTURE_2D);

// 绘制正方形,使用号、号和号纹理

glActiveTextureARB (GL_TEXTURE0_ARB);

glEnable(GL_TEXTURE_2D);

glBindTexture(GL_TEXTURE_2D, Tname0);

glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glActiveTextureARB (GL_TEXTURE1_ARB);

glEnable(GL_TEXTURE_2D);

glBindTexture(GL_TEXTURE_2D, Tname1);

glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glActiveTextureARB (GL_TEXTURE2_ARB);

glEnable(GL_TEXTURE_2D);

glBindTexture(GL_TEXTURE_2D, Tname2);

glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

glBegin(GL_QUADS);

glMultiTexCoord2fARB (GL_TEXTURE0_ARB, 0.0, 0.0); glMultiTexCoord2fARB (GL_TEXTURE1_ARB, 0.0, 0.0); glMultiTexCoord2fARB (GL_TEXTURE2_ARB, 0.0, 0.0);

glVertex3f(-1.0, -3.5, 0.0);

glMultiTexCoord2fARB (GL_TEXTURE0_ARB, 0.0, 1.0); glMultiTexCoord2fARB (GL_TEXTURE1_ARB, 0.0, 1.0); glMultiTexCoord2fARB (GL_TEXTURE2_ARB, 0.0, 1.0);

glVertex3f(-1.0, -1.5, 0.0);

glMultiTexCoord2fARB (GL_TEXTURE0_ARB, 1.0, 1.0); glMultiTexCoord2fARB (GL_TEXTURE1_ARB, 1.0, 1.0); glMultiTexCoord2fARB (GL_TEXTURE2_ARB, 1.0, 1.0);

glVertex3f(1.0, -1.5, 0.0);

glMultiTexCoord2fARB (GL_TEXTURE0_ARB, 1.0, 0.0); glMultiTexCoord2fARB (GL_TEXTURE1_ARB, 1.0, 0.0); glMultiTexCoord2fARB (GL_TEXTURE2_ARB, 1.0, 0.0);

glVertex3f(1.0, -3.5, 0.0);

glEnd();

glActiveTextureARB (GL_TEXTURE0_ARB);

glDisable(GL_TEXTURE_2D);

glActiveTextureARB (GL_TEXTURE1_ARB);

glDisable(GL_TEXTURE_2D);

glActiveTextureARB (GL_TEXTURE2_ARB);

glDisable(GL_TEXTURE_2D);

glFlush();

}

void reshape(int w, int h)

{

glViewport(0, 0, (GLsizei) w, (GLsizei) h);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 30.0);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

gluLookAt((GLfloat)X, (GLfloat)Y, (GLfloat)Z, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); // 视图变换}

void pressKey(int key, int x, int y)

{

switch(key)

{

case GLUT_KEY_RIGHT:

X += 1;

glutPostRedisplay();

break;

case GLUT_KEY_LEFT:

X -= 1;

glutPostRedisplay();

break;

case GLUT_KEY_UP:

Y += 1;

glutPostRedisplay();

break;

case GLUT_KEY_DOWN:

Y -= 1;

glutPostRedisplay();

break;

default:

break;

}

}

int main(int argc, char** argv)

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);

glutInitWindowSize(250, 250);

glutInitWindowPosition(100, 100);

glutCreateWindow(argv[0]);

init();

glutDisplayFunc(display);

glutReshapeFunc(reshape);

glutSpecialFunc(pressKey);

glutMainLoop();

return 0;

}

【程序截图】

【说明】

对于Windows平台下,需要包含glext.h头文件。

方向键为控制投影参考点的位置。

第一行三个正方形分别是只贴一层纹理的效果。

第二行两个正方形分别是贴上面两种纹理的效果。

第三行两个正方形是贴上三种纹理的效果。

怎样用ps做出金属光泽的效果

手绘 南京-大脚瘦子(81716267) 17:58:10 保留质感强烈部分 南京-大脚瘦子(81716267) 17:58:16 必要的时候做些纹理 吸取该部分的主体色,用画笔20-30透明度涂抹 与原始的相比肯定有区别,你把它想象成3D做的模型,明暗面光线注意,纹路也要做的 必要的时候还要找素材做纹路 京-大脚瘦子(81716267) 18:07:29 比如这样的钢板纹路 南京-大脚瘦子(81716267) 18:07:38 南京-大脚瘦子(81716267) 18:07:58 https://www.360docs.net/doc/a110428507.html,/architecture/mx_diwen/jinshuguangze/image_b6 367e7ffce9f3dc.htm 东莞-剑鬼(763838425) 18:08:22 哦,明白了,像是用3D材质那样对吧 南京-大脚瘦子(81716267) 18:08:32 还有这样的 南京-大脚瘦子(81716267) 18:08:28 南京-大脚瘦子(81716267) 18:08:34 都可以

只要你能想到,就一定可以做到 南京-大脚瘦子(81716267) 18:10:19 图层改为明度 南京-大脚瘦子(81716267) 18:10:30 这个杂色太多 东莞-剑鬼(763838425) 18:11:56 哦,是版本的问题,我CS的 南京-大脚瘦子(81716267) 18:12:09 都有 巧用滤镜制作金属质感的枫叶[2008-5-17] 来源:天极作者:王伟光 本教程介绍金属质感图形的制作方法。思路:先使用滤镜效果制作出金属质感的大图。使用到的滤镜效果比较多。然后把自己想要的图形画出选区,然后把多余的部分删除,再整体调整下,效果 就出来了! 最终效果

opengl机器人纹理

opengl 机器人纹理 #include <glut.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> static GLfloat xRot = 0.0f; static GLfloat yRot = 0.0f; //是否停止转动 bool IsStop=false; //光照使用光源 GLfloat lightPos[] = { 1.0f, 0.0f, -1.0f, 0.0f }; GLfloat specular[] = { 1.0f, 1.0f, 1.0f, -1.0f};//反射光 GLfloat specref[] = { 1.0f, 1.0f, 1.0f, 1.0f };//a GLfloat ambientLight[] = { 0.5f, 0.5f, 0.5f, 1.0f};//环绕光GLfloat spotDir[] = { 0.0f, 0.0f, -1.0f }; GLboolean bEdgeFlag = TRUE; void showText(void); void resetPerspectiveProjection() ; void setOrthographicProjection() ; void Something(); void renderBitmapString(float x, float y, void *font,char *string); //设置背景 void SetupRC(void) { glEnable(GL_CULL_FACE); glEnable(GL_LIGHTING); glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight); glLightfv(GL_LIGHT0,GL_DIFFUSE,ambientLight); glLightfv(GL_LIGHT0,GL_SPECULAR,specular); glLightfv(GL_LIGHT0,GL_POSITION,lightPos); glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,30.0f); glLightf(GL_LIGHT0,GL_SPOT_EXPONENT,20.0f);

金属材质绘制

金属材质绘制 金属不同质感: 从上面这些图例来看金属材质是非常多样的,但金属材质无非是纹理上的差别、污渍上的差别和高光上的差别。知道了这一点绘制金属材质的时候就不会无从下手了。那么下面就来通过一个实例来具体介绍一下金属材质的制作流程和技巧。 下面就是最后制作后在M A Y A中实时显示的最终效果: 不带有n o r m a l m a p和s p e c u l a r m a p的效果

带有n o r m a l m a p和s p e c u l a r m a p的效果 绘制贴图前一般我们会拿到一个简模,有的模型是会带有高模烘好的l i g h t m a p和n o r m a l m a p两张图。这个模型没有l i g h t m a p和n o r m a l m a p 需要我们来自己制作。一般游戏都是有c o n c e p t的,不过有的会很简单,是要靠自己根据游戏的风格来发挥的。这个实例没有c o n c e p t,请参考上面的最终完成图进行绘制。 简模 在绘制贴图前我们要检查一下U V是否分的合理,如果有不合理的地方在允许的情况下要进行调整。U V是绘制一个好的贴图的基础,U V分的合理我们才能更加顺手的完成绘制。分配U V要最大限度地利用空间,一个物体的不同的面尽量要保证U V大小一致。还要尽量保证U V很平竖直,如果贴图尺寸太小要考虑共用U V。 UVmap

※ 绘制贴图可以简单的分成以下五个步骤: 1、绘制D I F F U S E M A P的颜色 2、为D I F F U S E M A P添加纹理 3、绘制D I F F U S E M A P的污渍 4、用D I F F U S E M A P制作S P E C U L A R M A P 5、用D I F F U S E M A P转换N O R M A L M A P DIFFUSEMAP的制作: D i f f u s e m a p是最重要的贴图,n o r m a l m a p和s p e c u l a r m a p都是基于这个贴图而来的。我们要画一张1024×1024的贴图。首先,在M A Y A中导出一个1024×1024的UVmap,再在P h o t o s h o p中新建一个名为m e t a l b o x的1024×1024的空白图(图1)。然后选择将导出的UVmap按住shift 拖拽到这个图中(按住shift键拖拽,可拖拽到另外一张图的同等位置。),在图层样式中将UV图层设置为“滤色”。(图2) (图1) (图2)根据UV和模型大体区分出不同物体的颜色。(图3、4) (图3) (图4) 下面我们绘制l i g h t m a p(图5)。l i g h t m a p是要将模型没有表现出来的结构绘制出来,绘制视情况而定,如果时间允许可以绘制更加多的细节来丰富所做的物体。(l i g h t m a p的具体制作可以参考枪的教程)

金属质感表现-金属材质教程

图文]3DMAX打造金属质感 (2010-05-13 17:41:12) 转载 分类:3D动画与CG教学 标签: 游戏 先看最终效果。 其实还有很多地方有问题,比如刀把的细节不够,到刃没表现出来~本来想找时间改改~最后实在是懒的不行了,就这样吧,个人认为金属的质感已 经表现出来了。

看一眼就觉得刀上的花纹很复杂,制作起来不是那么容易,其实相当简单,下面就来看看是怎么达到这样的效果的。 首先将模型的UV分好,这个模型分uv很简单,给刀身一个平面坐标,单击修改面版下的Modifier List下拉列表,选择Unwrap UVW。选择Parameters卷栏下的Edit…按钮弹出Edit UVWs面板,然后在修改面板下选择Unwrap UVW下的Select Face,选择刀身的面给一个Planar Map。刀的背部也是一样的。给刀柄一个圆柱坐标,选择Modifier List下拉列表下的Mesh Select,选择Polygon然后选中刀柄部分的面,在加入一个Modifier List下UVW Mapping 给Cylinder坐标,点一下Fit。然后调整下,基本上就可以了。然后在photoshop里对着uv 线来绘制贴图。贴图很简单,就是拿几张照片合成下就行。 这把刀一共用了2张贴图,一张是表现表面的纹理,还有一张是凹凸贴图。

下面就把绘制好的贴图指定给物体,打开max的材质编辑器,设置如下。

在这里有必要说一下,在制作刀的时候我们的diffuse(固有色)和Bump(凹凸)用的是2张贴图,那是因为刀的表面有特定的凹凸,而现在制作的地面可以直接用一张贴图,这样地面会看上去凹凸不平,增加真实的感觉。 Max灯光的参数不多,不值得一讲,但是一幅好的作品灯光是非常重要的,也可以说“光”是一副好作品的灵魂。在打灯光之前先确定场景的基调和气氛,表达出怎样的感情,是否有特殊光照的效果。为了产生真实的3D图象布光是很重要的,在我们的现实生活中所有的物体都会有反射光,每个物体受光后都会吸收一部分光线而将另外一部分光线反射出去,在max里面我们要手动去模拟。使用彩色的光线也是很重要的,所有的光线都有一个颜色,并非纯白。 好了,下面再来看看灯光是如何设置的。

二维纹理映射

二维纹理映射 一、实验目的和要求 掌握纹理映射的基本原理,利用VC++ OpenGL实现纹理映射技术。 二、实验原理 纹理映射是真实感图形制作的一个重要部分,运用纹理映射可以方面地制作真实感图形,而不必花更多的时间去考虑物体的表面纹理。如一张木制桌子其表面的木纹是不规范的,看上去又是那么自然,如果在图形制作中不用纹理映射,那么只是这张桌面纹理的设计,就要花费很大精力,而且设计结果也未必能像现实中那么自然。如果运用纹理映射就非常方便,可以用扫描仪将这样的一张桌子扫成一个位图。然后的具体的操作中,只需把桌面形状用多边形画出来,把桌面纹理贴上去就可以了。 另外,纹理映射能够在多边形进行变换时仍保证纹理的图案与多边形保持一致性。例如,以透视投影方式观察墙面时,远端的砖会变小,而近处的砖就会大一些。 此外,纹理映射也可以用于其他方面。例如,使用一大片植被的图像映射到一些连续的多边形上,以模拟地貌,或者以大理石、木纹等自然物质的图像作为纹理映射到相应的多边形上,作为物体的真实表面。 在OpenGL中提供了一系列完整的纹理操作函数,用户可以用它们构造理想的物体表面,可以对光照物体进行处理,使其映射出所处环境的景象,可以用不同方式应用到曲面上,而且可以随几何物体的几何属性变换而变化,从而使制作的三维场景和三维物体更真实更自然。 在OpenGL中要实现纹理映射,需要经历创建纹理、指定纹理应用方式、启用纹理映射、使用纹理坐标和几何坐标绘制场景几个过程。 用于指定一维、二维和三维纹理的函数分别为: Void glTexImage1D(GLenum target, Glint level, Glint components, GLsizei width, Glint border, GLenum format, GLenum type, const GLvoid *texels); Void glTexImage2D(GLenum target, Glint level, Glint components, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *texels); Void glTexImage3D(GLenum target, Glint level, Glint components, GLsizei width, GLsizei height, GLsizei depth, Glint border, GLenum format, GLenum type, const GLvoid *texels); 其中,参数target取值一般为GL_TEXTURE_1D, GL_TEXTURE_2D和GL_TEXTURE_3D,分别与一维、二维和三维的纹理相对应。参数Level表示纹理多分辨率层数,通常取值为0,表示只有一种分辨率。参数components的可能取值为1~4的整数以及多种符号常量(如GL_RGBA),表示纹理元素中存储的哪些分量(RGBA颜色、深度等)在纹理映射中被使用,1表示使用R颜色分量,2表示使用R和A颜色分量,3表示使用RGB颜色分量,4表示使用RGBA颜色分量。参数width,height,depth分别指定纹理的宽度、高度、深度。参数format和type表示给出的图像数据的数据格式和数据类型,这两个参数的取值都是符号常量(比如format指定为GL_RGBA,type指定为GL_UNSIGNED_BYTE,参数texels指向内存中指定的纹理图像数据。 在定义了纹理之后,需要启用纹理的函数: glEnable(GL_TEXTURE_1D);

网友原创教程:使用材质贴图通道

网友原创教程:使用材质贴图通道 最近网友教程模块得到了广大网友的积极响应,又有朋友提供了新的教程,该教程是关于材质设置的,该网友仅使用了一个标准材质就使皮夹具有了皮革、金属、缝线等多种对象的质感属性,并且具有不同的凹凸、反射等特性,这些都是通过设置贴图通道的贴图来实现的。大部分的贴图通道通过灰度模式来控制材质的某种属性,例如凹凸贴图通道使用的贴图白色的位置有突出感,黑色的位置有凹陷感;不透明度通道使用的贴图白色部分为完全不透明,黑色部分为完全透明等。利用这一特性,可以使一种材质具有不同的质感。这一方法在游戏行业应用较为广泛,因为游戏行业的特殊要求,建模不能过于复杂,所以只能从材质方面来完善模型。 对于一个初学者来说,想要能够熟练使用材质贴图通道设置材质,尤其是这种比较复杂的材质,首先必须对材质非常地了解,知道每种贴图通道用于控制哪种属性,能够实现怎样的效果;还需要掌握PS等图形图像处理软件,因为材质的设置是非常灵活的,不可能每次都找到合适的贴图,很多时候需要自己来制作;还要有一定的统筹和规划能力,善于思考,这类的材质往往很复杂,每一步的设置都和最后的效果息息相关,必须有清晰的思路,才能把材质完成。所以基础知识的学习是相当重要的。 该网友上次发了制作字符画的教程,这一次的教程较上一次有了很大的进步,不管在叙述、分类还是知识点方面都有所提高,看来这位朋友很善于采纳别人的意见,并有很强的理解能力和动手能力。夸奖的话就不多说了,这个教程很不错,希望继续努力。 最后对教程提一些意见,首先那个烫金的效果不太好,很像一个100%自发光的效果,这也不能怪你设置得不好,主要是方法问题,因为使用材质贴图通道设置材质还是有很大的限制,不管怎样应用通道,明暗模式等基本属性不会变的,只是程度有所差别而已,所以不太适合设置两种质感差别过大的材质。设置这类的材质还是使用复合材质类型比较好。例如混合、合成等都可以实现这一类的效果,而且操作更为简单。 光源有些偏暗,布光对材质的影响很大的,所以如果能把光源完善一点就更好了。 3ds max 2011新增了板岩材质编辑器,该编辑器使材质的设置更为直观,有兴趣的朋友可以尝试使用一下,对于这种自己设计的材质,板岩材质编辑器设置起来更方便一点。 上个实例好像没提什么意见啊,这个提了意见并不是说着个实例不好,其实恰恰相反,因为上一个太简单了,没什么好点评的,这个涉及到这么多知识点,肯定有可讨论的地方。希望大家能够更积极地参与进来,毕竟学会一个实例和自己写一个实例需要掌握的知识量肯定是不同,在这个过程中,自己也会巩固所学知识,对软件有更深刻的理解。 这次给大家带来的是3d max材质篇相关内容(皮夹子材质赋予),以后会逐渐给大家分享经验,促进交流!亲手写教程是一个知识巩固的过程,所以我是来和大家一起学习的,很多地方写的并不是参数怎么怎么多少,更多的是我制作时的时候是怎么想的!希望大家学完之后,有所收获!也希望大家一起来参与与大家分享自己经验!感谢腾龙学习平台!

计算机图形学大作业报告记录(灯光纹理映射)

计算机图形学大作业报告记录(灯光纹理映射)

————————————————————————————————作者:————————————————————————————————日期:

大作业报告 实验课程名称:计算机图形学 学生姓名: 班级: 学院(系):学生学号: 指导教师:成绩:

一、目的 这次大作业是作为这学期的最后的一个考核,所以必须要用到所有的本学期学过的知识,比如怎样画出三维图形,怎样在图像上在图像上添加纹理光照,怎样使用鼠标和键盘进行人机交互等。 二、主要功能模块设计 1 矩阵运算模块的设计: 功能描述:程序启动后,这部分功能模块会为整个应用程序提供算法支持,具体是矩阵直接的相互运算,在2D向3D转化过程中会起到很重要的作用。 代码设计: float vv(float * v1, float * v2){ return v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2]; } void vxv(float * n, float * v1, float * v2){ n[0] = v1[1] * v2[2] - v1[2] * v2[1]; n[1] = v1[2] * v2[0] - v1[0] * v2[2]; n[2] = v1[0] * v2[1] - v1[1] * v2[0]; } void loadIdentity(Matrix m){ Matrix identity = {{1.0,0.0,0.0,0.0}, {0.0,1.0,0.0,0.0}, {0.0,0.0,1.0,0.0}, {0.0,0.0,0.0,1.0}}; for(int i = 0;i < 4; i++) for(int j = 0;j < 4; j++) m[i][j] = identity[i][j]; } void preMultiply(Matrix p, Matrix m){

国外制作的Maya材质教程_做旧金属

导言 这是一部国外制作的经典教程,虽然有点久,但一直收藏着,今天拿出来和大家分享一下,相信对大家能够有所帮助。 使用NURBS建模。(图01) 图01 贴图(图02) 图02 按下图方式创建一2D placement node模式贴图。我们使用如上材质设置color和bump。(图03)

图03 得到如下效果。(图04) 图04 设置材质属性(图05)

图05 接下来我将在Specular Color属性上连接贴图,在这个材质网络中,将File纹理复制,这样我只需要一个纹理置换节点,然后我将复制出来的File纹理关联到Specular Color属性。(图06) 现在高光看起来更好了一些,接下来,我将在高光颜色上加入一些变化,加入这种变化是通过在连接到Specular Color属性上的File纹理的Color Remap属性上加入Ramp节点实现的。(图07)

图07 在关联到Specular Color属性上的File纹理的Effects标签下,点击Color Remap后面的Insert按钮。(图08) 图08 这就是最终的这个管子的材质网络,剩下的就是不断的调节Ramp节点,以便得到你期望的结果。使用实时渲染,可以很容易核对不同的设置得到的结果,现在就可以调节Ramp 节点,测试不同的结果,下面的结果就是调节Ramp节点得到的效果。(图09)

图09 通过调整ramp后所得到的不同效果。(图10) 图10 继续调整ramp(图11、图12)

图11 图12 OK,到这里就结束了,方法很简单但是效果很好。

opengl纹理

OpenGL可以把纹理映射到指定的图形的表面上。简单一点的,就是给平面映射纹理,比如一个四边形,一个长方体的6个面,都 关于将一个位图作为纹理映射到某个或者多个面上,可以学习Jeff Molofee的OpenGL系列 对于指定的多个纹理,要根据自己的需要映射到不同的面上,需要对位图创建一个数组,用来存储位图的名称,然后在初始化Op 成多个纹理存储到一个纹理数组中,接着就可以指定绘制的某个面,对该指定的面进行纹理 下面,在的Jeff Molofee教程的第六课的基础上,实现对6个面分别进行不同的纹理映射 准备工作就是制作6幅不同的位图,如图所示: 关键代码及其说明如下。 创建全局纹理数组 GLuint texture[6]; // 创建一个全局的纹理数组,用来存储将位图转换之后得到的纹理,对应于立方 加载位图文件 加载位图,也就是把位图读取到内存空间,实现纹理的创建,加载位图的函数说明一下 AUX_RGBImageRec *LoadBMP(char *Filename) // 根据位图文件的名称进行加载 {

FILE *File=NULL; // 文件指针 if (!Filename) // 如果没有指定位图文件名称就返回NULL { return NULL; } File=fopen(Filename,"r"); // 根据指定的位图文件名称,打开该位图文件 if (File) // 如果位图文件存在 { fclose(File); // 因为只是需要判断问题是否存在,而不需要对位图文件进行写操作,所以关闭位return auxDIBImageLoad(Filename); // 其实,只需要一个真正存在的位图文件的名称,实现加载位图文 } return NULL; // 位图文件加载失败就返回NULL } 上面实现加载位图的函数中,AUX_RGBImageRec是glaux.h中定义的类型,该类型的定义如下 /* ** RGB Image Structure */ typedef struct _AUX_RGBImageRec { GLint sizeX, sizeY; unsigned char *data; } AUX_RGBImageRec; 首先,AUX_RGBImageRec类型是一个RGB图像结构类型。该结构定义了三个成员: sizeX ——图像的宽度; sizeY ——图像的高度; data; ——图形所包含的数据,其实也就是该图形在内存中的像素数据的一个指针。 AUX_RGBImageRec类型的变量描述了一幅图像的特征。 上述函数中,调用了glaux.h库文件中的auxDIBImageLoad函数,其实它是一个宏,函数原型为auxRGBImageLoadW(LPCWSTR 在该库文件中找到它的定义,如下所示: /* AUX_RGBImageRec * APIENTRY auxRGBImageLoad(LPCTSTR); */ #ifdef UNICODE #define auxRGBImageLoad auxRGBImageLoadW #else #define auxRGBImageLoad auxRGBImageLoadA

材质制作与贴图技巧

对于一些新手来讲工作中常常会遇到一些材质参数的问题,还有一些常识,以下给大家工作中常用的材质参数材质都有不同的表现)和一些注意事项(比如VR渲染器下不能用光线跟踪等等)! 常用材质材质的设置不是一成不变的,也不是毫无规律,这里给出的是个大概的参数值,具体的还要配合场还有其它很多种调法,这里只介绍VR的调法,希望能起到抛砖引玉的作用。 我们生活中最常用的不外乎以下几种:石材、玻璃、布料、金属、木材、壁纸、油漆涂料、塑料、皮革。 一、石材材质分析: 石材有镜面、柔面、凹凸面三种; 1、镜面石材:表面较光滑,有反射,高光较小; Diffuse (漫反射)- 石材纹理贴图; Reflect(反射)- 40; Hilight glossiness - 0.9 ; Glossiness(光泽度、平滑度)- 1; Subdivs(细分) - 9。 2、柔面:表面较光滑,有模糊,高光较小; Diffuse (漫反射)- 石材纹理贴图; Reflect(反射) - 40; Hilight glossiness-关闭; Glossiness(光泽度、平滑度)-0.85; Subdivs(细分) -25。 3、凹凸面:表面较光滑,有凹凸,高光较小; Diffuse (漫反射)- 石材纹理贴图; Reflect(反射) - 40; Hilight glossiness-关闭; Glossiness(光泽度、平滑度)- 1; Subdivs(细分) -9; Bump(凹凸贴图) - 15%同漫反射贴图相关联。 4、大理石材质 Diffuse (漫反射)- 石材纹理贴图; Reflect(反射) -衰减 - 1; Hilight glossiness - 0.9; Glossiness(光泽度、平滑度)- 0.955、 5、瓷质材质:表面光滑带有反射,有很亮的高光; Diffuse (漫反射)- 瓷质贴图(白瓷250); Reflect(反射) -衰减(也可直接设为133,要打开菲涅尔,也有只给40左右); Hilight glossiness - 0.85; Glossiness(光泽度、平滑度)- 0.95(反射给40只改这里为0.85);

3dmax贴图教程:教你如何制作一个真实的金属材质

3dmax贴图教程:教你如何制作一个真实的金属材质 我们利用3dmax贴图制作金属材质,有一部分需要ps处理,最后的效果见下图。 首先,建模,给它一个贴图坐标器。 然后,贴图展开的修改器,赋予它一个网格材质。网格材质容易看出扭曲来,可以通过手调他的重复次数来使它有合适的贴图比例。打开在视图中显示贴图的选项是很有帮助的,对于这个物体我需要的是1.3和1的重复次数,所以比率是1.3:1。然后用texporter的展开贴图弄一个快照,并且保存为tif格式。(tga也不错,我们必须要确定的是得到一个alpha通道)。我需要的是高度为800象素的图片,因此呢我的宽度是800*1.3=1040。 其实也没有必要弄得这么准确,但是我做这个事情主要是避免它在某个方向上有扭曲现象。好多时候你也可以根据texport来估计贴图的比率。 下面是展开图的网格物体,我们准备在他的上面绘制贴图。在ps中我复制alpha通道到一个新的图层然后修改模式为multiply。这中方法黑色的线框将要显示,但是所有的白色的物体将要是透明的,这可以让你轻松的看到你所绘制的东西。这一层是在最顶端的它总是阻止以外的绘制出现。

我然后放置了一层黄色的油漆和绿色的油漆,我是利用了一些有文理的照片,然后在它上面绘制颜色。 图为铜锈贴图

图为铜锈贴图 它在ps中的状况如图: 在网格物体的指导下我们可以绘制油漆脱落的部分,我们需要重新建立一层在他上面用黑和白色涂料的图层,我们用印章工具绘制出高对比度的图象,还有在需要的地方小心手绘。

图为ps绘图

图为ps绘图效果 材质基本上完成了,让我们给他做旧一点。另外建立了一层,并且设置为multiply,用很大的,柔软的笔用一个棕色的颜色来绘制污迹。特别关注的是一些角落和拐角处,那些地方聚集了很多的灰尘。保持他的柔软度调整他的硬度也可以得到很难看的材质。 现在是给表面加罩的时候了,这需要沿着边也要很大的表面就象中间的材质一样用一个大的刷子来进行。

实验三基于OpenGL的圆柱绘制OpenGL纹理光照课件资料

实验三基于OpenGL的圆柱绘制 1. 实验目的 通过圆柱的绘制,掌握OpenGL编程环境的设置,基本图元的使用,光照的设置以及纹理的设置,理解曲面绘制的基本原理。 2. 实验内容 (1)设置OpenGL编程环境; (2)利用三角形和四边形等基本图元绘制底面圆圆心在坐标原点,半径为r,高为h,方向沿z轴方向的圆柱; (3)设置光照 (4)设置纹理:在圆柱的侧面上显示一张图片 3.主要问题&结果截图 ①如何绘制圆柱? 一种方法是调用gluc中的函数gluCylinder 但本实验要求利用三角形和四边形等基本图元绘制 所以这里主要采用类似微积分的方式绘制,就是将椭圆的侧面用多个四边形,底面用多个三角形来表示 关键代码 void Circle()底面的圆形void Cylinder()圆柱的侧面 glBegin(GL_TRIANGLE_FAN);//扇形连续填充三角形串 glVertex3f(0.0f, 0.0f, 0.0f);//圆心:这是三角形作为圆心的顶点 int i = 0; for (i = 0; i <= 360; i += 15) glBegin(GL_QUAD_STRIP);//连续填充四边形串int i = 0; for (i = 0; i <= 360; i += 15) { float p = i * 3.14 / 180; glTexCoord2f(p/10,0.1f);

{ float p = i * 3.14 / 180; glVertex3f(sin(p), cos(p), 0.0f);//圆周:这是三角形作为扇形弧端点的顶点(p的值取0-2PI)就能画出一个类似圆形 } glEnd(); glVertex3f(sin(p), cos(p), 1.0f);//这个1.0f 指定的是高度 glTexCoord2f(p/10,0.0f); glVertex3f(sin(p), cos(p), 0.0f); } glEnd(); 效果: 再调用画圆形的函数画上两个底面 Circle(); glTranslatef(0, 0, 1);//设定高度为1,画 上底面 Circle(); 效果: ②如何纹理贴图? 关键代码:

计算机图形学实验三(纹理映射)

实验三纹理映射 一、实验目的 (1)掌握OpenGl的三维图形制作方法 (2)掌握Visual C++环境下的OpenGL图形开发 二、实验内容 在三维图像上添加纹理映射 三、实验结果 实验代码如下: /*********************************************** * glut_applicationwriten by yyb * ***********************************************/ #include #include #include #include #pragma comment(lib,"glaux.lib") #define MAX_TEXTURES 6 // max textures displayed /* creates a enum type for mouse buttons */ enum { BUTTON_LEFT = 0, BUTTON_RIGHT, BUTTON_LEFT_TRANSLATE, }; intmButton = -1; intmOldY, mOldX; boolfullscreen; //////////////////////////////////// float eye[3] = {0.0f, 0.0f, 7.0f}; float rot[3] = {45.0f, 45.0f, 0.0f}; constint ESC = 27; int wireframe = 0; constint GL_WIN_WIDTH = 640; constint GL_WIN_HEIGHT = 480; constint GL_WIN_INITIAL_X = 0; constint GL_WIN_INITIAL_Y = 0; /* array to hold texture handles */ GLuintg_TexturesArray[MAX_TEXTURES];

OpenGL完全教程 第六章 纹理贴图

OpenGL完全教程 第六章 纹理贴图 作者:何咏 日期:2006-2-3 20:56:39 点击:4719 如需转载本文,请声明作者及出处。 第六章 纹理贴图 截至目前为止,我们已经能够绘制各种3D物体,并为它们增加光照效果,使它们更具有立体感。但是,在实际运用中,我们不仅仅需要简单地绘制一个物体的轮廓,我们需要绘制蓝天白云、真实的墙壁和物体、人物和树木。要达到这一目的,简单的将模型的轮廓绘制出来时远远不够的。我们需要使用纹理贴图来再现真实的细节。 在计算机硬件高速发展的今天,即使是最低端的显卡也能很快地处理大量的纹理,满足我们的需求。这些条件可以让我们毫无顾虑的使用OpenGL的纹理贴图功能,绘制出形形色色的物体。 本章将是学习OpenGL的最后一个基础章节。本章之后,我们将开始接触一些OpenGL的高级专题 学习本章内容,你将了解: ?什么是纹理贴图 ?如何创建纹理图像 ?OpenGL中贴图的方式 ?使用纹理对象来管理的纹理 ?将纹理运用到图元上 ?自动生成纹理坐标 ?多贴图纹理 6.0 准备工作 由于Delphi为我们所提供的OpenGL头文件是OpenGL1.0版本的,因此里面缺少一些函数的声明,这导致我们不能使用直接调用这些函数。因此我们要手动为OpenGL库添加下面的代码一进行补完: procedure glBindTexture(target: GLEnum; texture: GLuint); stdcall; external opengl32; procedure glDeleteTextures(n: GLsizei; textures: PGLuint); stdcall; external opengl32; procedure glGenTextures(n: GLsizei; textures: PGLuint); stdcall; external opengl32; function glIsTexture(texture: GLuint): GLboolean; stdcall; external opengl32; procedure glPolygonOffset(factor, units: GLfloat); stdcall; external opengl32; function gluBuild2DMipmaps(target: GLEnum; components, width, height: GLint; format, atype: GLEnum;

vrayforsketchup渲染教程②--材质篇

vray for sketchup渲染教程②--材质篇不 上一篇教程《参数篇》就在我的上一篇日志 前一篇的教程是关于渲染参数的设定方法,我已经尽量浓缩了~很少用到的参数我就不提及了,毕竟我们不需要制作商业化效果图,若是全部解析便会沉冗、没有意义。本篇也一样,我将会重点讲解建筑中常用材质的设定方法以及重要材质 参数的讲解。 还是那句话,大家看到有什么不对就提出来~~我会认真修正! 先允许我吐槽一下vray for sketchup,咳咳,以前我一直用3dsmax,这个暑假才开始接触su和VFS,个人感觉VFS局限性较大,好多操作的非常的不便。首先是点击渲染后等待场 景载入的那段时间实在是太长了,就算是最新的 1.6beta版本提速了,个人感觉只是小场景的载入速度提升了而已,而max中,那是瞬间的事。材质编辑十分不方便,在视口中只能 预览漫反射贴图在模型上的平铺状态,反射折射凹凸通道就不能显示,只能靠反复猜反复测试,而且每次调材质都要手动点击预览才能更新至最新的状态,也不能清晰的看见材质个个 图层的层级关系,只能靠记忆力。。。。。置换贴图在模型转角处会炸裂开...而在max中可以用平滑组或者vraydisplacement3d模式的“保持连续性”来解决问题,不知道有没有大 神知道解决办法....球形的对象贴贴图各种麻烦,没有包裹模型等等等........啊啊啊啊啊!吐槽完了,抱歉!

首先允许我啰嗦一下,让我简单地阐述一下材质的作用,希望大家耐心的看完这一小段。通常当建好模以后,就会按照之前设想给模型贴上材质,相信很多初学者都有这样的经验,贴完材质以后渲染出来就像一个玩具,而不像一个建筑,尤其是模型较为简单的情况下,感觉会更加突兀。个人觉得是场景的“复杂”程度影响了整体的真实性,这个“复杂”不单是指模型形体有多丰富,这个“复杂”包含了模型的复杂程度和材质、灯光的复杂程度,整体越是“复杂”的场景,就越是能干扰人的判断,只要能把握住人对现实世界的印象的捕捉规律,就能创造出所 谓“真实”。假如是一个非常复杂的城市模型,也许随便给些材质就能渲出不错的感觉来,但要是只给你一堵墙,也就是一个长方体,如何处理它的材质,如何做 出一堵墙的感觉来,是有一定学问的。在模型简单的情况下,就应该提升材质的细节程度,把握材质的特征,这就需要我们对材质的理解、丰富的想象能力和对软件的灵活运用。 下面是我用3dsmax制作的一个场景,可见建筑的模型非常简单。 要是只简单地根据自己的意愿往上贴贴图而没有思考应有的细节,就很有可能渲染出下图那样拙劣的效果【我是故意做得特别挫,以增强前后的对比,咳咳】

《BTS高级角色纹理贴图教程》面部贴图技术要点阐述解析

《BTS高级角色纹理贴图教程》面部贴图技术要点阐述解析 一:漫反射贴图 1:素材的选择 原则是选择大尺寸,高像素,尽量少的高光和阴影。原教程上是他们自己照的。 2:素材的调整 在ps里调整要投影的素材照片,画布大小调整成方形。作用是防止图片拉伸(图1)(个人感觉:如果对照片进行调色如调整“对比度”“色阶”等,建议把用到的几张照片拉到一张图片里集体调,这样能避免一些重复劳动和素材的颜色统一的问题。) 3:zbrush投影大师映射贴图 步骤流程: 1:三维软件(MAX ,MAYA等)导出OBJ格式文件。ZB导入模型后,调整与要映射的照片一样的角度。这时可以细分模型使其看起来比较光滑。 2:创建纸张和更改显示模式为FAST,以便于观察(图2.图3) 3:进入投影大师模式,导入图片(image plane为插件)用缩放,移动,使图片与模型大小对齐,鼠标左键点选图片部分进行微调对齐。图4,5,6,7 4:退出投影大师,并且上下翻转贴图并输出保存。图8 5:再次投影其它角度。这时候会出现一个问题就是载入图片的时候,会载入上一张,这个时候应该点“texture”里的Import导入想要投影的照片。图9 “图2

图3 图4

图五 图6

图7 图8

9

4:PS里的平拼接 这个无非是拼接和对称什么的,要做成什么样子,大家大概也都知道,就是把投影出来个各个角度的图片在PS里拼合成一张,不要有明显反而缝隙和脏痕非常值得注意的是尽量少用或者不用图章工具,用多了会贴出来的效果会很脏,且丢失细节,最好的是选择相近的皮肤去覆盖后擦除边缘。个人发现了一个简单的对称方法,(图10)还有新手最好不要用橡皮擦去擦除多余的部分,万一擦过了没有办法后悔,最好是用“蒙板”用黑笔刷画,画多了可以换成白笔刷刷回来。(图11)

金属的贴图和设置

很多人因为金属的贴图和设置方面有很多不明白的地方。特别是不锈钢类的材质。这里谈一点体会。 金属的外观工作原理: 金属是一种具有大量自由电子的的物质。这样在金属的表面游离着一层不会逃逸的自由电子,自由电子的多少和受金属原子的大小限制也很大,其中金属键的强弱起很大的作用。这样,各种不同的金属具有自己不同的光泽和色彩。所以,在MAX中,有一个材质shader 是专门用来模拟金属物体的,从重金属到轻金属,任何金属物体都能模拟。如果你模拟不出来,那么请打一下自己的耳光,检查一下自己是否把MAX搞明白了,是否知道了物体的表面特性的实际知识。 金属分有色金属和黑金属两重。比如黄金属于有色金属。铝、铁等是黑金属。有色金属的diffuse色彩就调成金属的固有色。如果使用standard材质就要根据反射贴图的强弱调整,(diffuse的亮度÷2.55)+反射数值=100为真实情况。如果需要增强贴图来减少真实灯光布置的工作量,那么这个树脂可以高于100。黑金属则把diffuse调整为黑色或灰色,如果你想成为高手,请把它调整为黑色。因为黑色的DIFFUSE才是最真实的。 有些金属表面有生锈、污渍等东西。必须使用混合贴图和一层一层的蒙板来完成。这里不予讨论。这里要讨论的是解决光洁的金属表面。如果使用raytrace材质,那么就用考虑“(diffuse 的亮度÷2.55)+反射数值=100”,因为计算机自动把raytrace设置成真实的物理计算。反射提高,diffuse就降低。如果有折射存在的话,先反射后折射最后剩下的就是DIFFUSE的作用了。如果不是必要,请不要使用raytrace材质。虽然它调整起来工作量小,但是它需要较真实的环境和大量的渲染计算量。 金属的高光决定了金属的色泽(重金属和轻金属)。金属的颜色决定了是否为有色金属和黑色金属。如此之外,金属最强烈的视觉效果就是反射。如果你的场景足够真实,灯光足够丰富,并且能够有充足的时间来计算和渲染你的场景,那么请使用raytrace贴图做反射。(standard材质)否则,这里就要用另一种方法来模拟。 另一种模拟就是贴图模拟。可以在reflection中使用一张贴图,并模糊掉。这个技术在很早以前就存在了,并一直存在与MAX自带的材质库中。你们可以去看看。 但是这个技术有一个问题,用于曲面光滑的物体效果很不错。用于平面如BOX物体就根本不象不锈钢。 发生这个问题的原因是因为那张贴图太小了,内容过于稀少。而且现实中很少有非常平的面。如果能够看到非常平的金属表面,它实际上表现的更象一面镜子。只不过,平金属表面常有加工的痕迹,一般都是圆周型的,所以你可以在上面看见扇形的高光,类似于光碟的扇形色彩。如果一要模拟平面的金属,那么你需要一张非常大的非常丰富的而且有一定要求的图片。 非常大的,丰富的图片,最好的就应该是一张360全景照片。并使用圆柱或者球形的环境贴图坐标。使用360全景照片,仍然不能满足一些要求,比如天空,在真实情况中,天空具有及其强烈的照明效果。这样,当这张图片反射在物体表面的时候,仍然会有所失真。因为亮度需要高的地方无法达到要求。毕竟一张图片最亮的地方才255。这样,就需要在output的选项中调整各项数值,让MAX能够模拟出高亮度动态信息图片。这就是很久以前传说中的

制作材质贴图的10个诀窍介绍

摘要: 制作材质贴图的10个诀窍介绍 导言: 本教程主要目的是为读者提供一些提示和秘籍,帮助读者制作更好看的材质。作者总共总结出10项制作贴图材质的顶级方案与大家分享。这些技巧都是别人教给作者和作者亲自发现的,虽不是解决材质问题的唯一方法,但也是在这几年里作者觉得最好的方法。 1、什么是材质? 我经常使用“材质”这个词。通常会看到有人给一个模型上了很难看的材质,这样当你看到材质图的时候就会觉得更糟糕。有些人认为材质图看上去好看还是不好看并不重要,只要放到模型上好看就行了。然而,检查材质比较好的方法还是看材质图,看看能不能认出是什么材质(例如金属、石头、橡胶等);或者认出是模型的哪一部份被展开了。(图01)

图01 当在处理最新的和次世代材料的时候(比如奇异的贴图和效果),这种方法就显得有些吃力了。不管怎么说,只要你能认出那些材质,那么几乎可以说放到模型上也会好看。要是认不出,那么你认为的所谓金属效果实际上只是一堆混乱的颜色和像素。(使用纯照片素材很容易引起这些问题,后面会进一步解释。) 除了一张好的漫反射贴图以外,一张高光图也起到了很大的作用。有些工具能帮你制作高光贴图,不过可以控制的选项很少,特别是用多种材料制作一种材质贴图或发光文字的时候。要是你想制作高光贴图,Photoshop是最好的选择。你可以用蒙板来隔离保留区域。如果材质包含白色的文字,你可以很方便地使用蒙板来调整效果。上面的图用混凝土和金属这两种简单的材料来制作出高光效果。分别进行了色阶(Level)调整。你也可以用亮度(Brightness)和对比度(Contrast)来调整,不过色阶(Level)则具有更多的选项。(图02)

相关文档
最新文档