怎么画桌子

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么画桌子相关的知识,希望对你有一定的参考价值。

参考技术A

书桌的画法详解:    

1、先画出桌子最顶的置物架,注意因为是画的半侧面,所以要画出物体的平面和两个侧面,不要忽视木板的厚度。

2、然后画出最上面一层的两个玻璃柜子和中间的两个隔断,要仔细画出上面的玻璃以及柜子上的拉手,画的时候要注意桌子的透视关系,这画出的桌子才自然。

3、接着画出桌子的桌面和中间的一层隔断,这样看起来是不是很形象。

4、再画出侧面的桌子的桌腿部分,也要注意画出每条木头的两个面,这样画出来的桌子腿更立体。

5、继续画出桌子下面的键盘抽屉和最右侧的两个抽屉。

6、最后画出抽屉的拉手和桌子上穿线的孔,这样就画好啦。

分类:

按材料分为:实木书桌和人造板书桌

1、实木书桌:是指书

桌的材料全部采用实木制造而成,做工精美,档次较高,售价也相对较贵。

2、人造板书桌:是指书桌的材料采用的是人造板来制造的,比较普通和常见,价格低廉,简单实用。

按款式分为:中式书桌和欧式书桌

1、中式书桌:适用于中式风格的书房,颇具古色古香的味道,书卷气息浓厚,也可让空间展示宁静的氛围。

2、欧式书桌:适用与欧式风格的书房,与书房的总体风格相称,款式精美,雕塑精致,有欧式宫殿的遗风。

OpenGL混合问题

【中文标题】OpenGL混合问题【英文标题】:OpenGL blend problem 【发布时间】:2010-09-22 20:28:07 【问题描述】:

我想画站在桌子上的水族馆(容器)。 水族馆的墙壁需要混合。

但是,如果我先画桌子然后画水族馆,我会得到: - 从桌子上方看:好的 - 从桌子底部看:错了,我还是看到了水族箱

如果我先画水族馆,然后画桌子,我会得到: - 从桌子上方看:错了,水族馆的墙壁对桌子没有影响(不过它们会影响背景) - 从桌子底部看:错了,我还是看到了水族箱

有图说明:

http://img213.imageshack.us/img213/6609/pictureem.jpg

代码: main.cpp

int DrawGLScene(GLvoid)

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);

 Cam.SetPrespective(); 

 //----------------
 GLfloat LightPosition0[]=  0.0, 0.0, 0.2, 1.0f ;
 GLfloat LightAmbient0[]=  0, 0, 0, 1.0f ;
 GLfloat LightDiffuse0[]=  1.0f, 1.0f, 1.0f, 1.0f ;
 GLfloat LightSpecular0[]=  1.0f, 1.0f, 1.0f, 1.0f ;
 glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient0);    // Setup The Ambient Light
 glLightfv(GL_LIGHT0, GL_POSITION,LightPosition0);   // Position The Light
 glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse0);    // Setup The Diffuse Light
 glLightfv(GL_LIGHT0, GL_SPECULAR, LightSpecular0);    // Setup The Diffuse Light
 glEnable(GL_LIGHT0);
 glEnable(GL_COLOR_MATERIAL);
 glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);

 //----------------

 glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient);    // Setup The Ambient Light
 glLightfv(GL_LIGHT2, GL_POSITION,LightPosition);   // Position The Light
 glLightfv(GL_LIGHT2, GL_DIFFUSE, LightDiffuse);    // Setup The Diffuse Light


 drawContainer(); //container drawn first in this example
 //.. draw other things
 drawTable();
drawGround();

/*
    //.. draw other things
    drawTable();
    drawGround();
    drawContainer(); //container drawn last in this example
*/
    CheckKeys();
 if(mouse) 
 
 CheckMouse();


return TRUE;


void drawTable()

 glColor3f(1.0f, 0.5f, 1.0f);

 GLfloat cx = MIN_X+(MAX_X-MIN_X)/2.0f;
 GLfloat cy = MIN_Y-0.1f;
 GLfloat cz = MIN_Z+(MAX_Z-MIN_Z)/2.0f;
 GLfloat cr = sqrt((MAX_X-MIN_X)*(MAX_X-MIN_X)+(MAX_Z-MIN_Z)*(MAX_Z-MIN_Z))*0.85f;
 int th = 5.0f; //centerPieceThickness

 drawCylinder(cx,cy,cz,th,cr);
 glColor3f(0.7f, 0.5f, 0.5f);
 drawCylinder(MAX_X+cr*0.155f, cy-th, MAX_Z+cr*0.155f, 25*th, cr*0.035f); 
 drawCylinder(MAX_X+cr*0.155f, cy-th, MIN_Z-cr*0.155f, 25*th, cr*0.035f);
 drawCylinder(MIN_X-cr*0.155f, cy-th, MIN_Z-cr*0.155f, 25*th, cr*0.035f);
 drawCylinder(MIN_X-cr*0.155f, cy-th, MAX_Z+cr*0.155f, 25*th, cr*0.035f);


void drawGround()
 
 int th = 5.0f;
 GLfloat cx = MIN_X+(MAX_X-MIN_X)/2.0f;
 GLfloat cy = MIN_Y-0.1f;
 GLfloat cz = MIN_Z+(MAX_Z-MIN_Z)/2.0f;
 GLfloat cr = sqrt((MAX_X-MIN_X)*(MAX_X-MIN_X)+(MAX_Z-MIN_Z)*(MAX_Z-MIN_Z))*8.5f;
 glColor3f(0.0f, 0.6f, 0.0f);
 drawCylinder(cx,cy-26*th,cz,10.f,cr);


void drawContainer()

    glColor3f(0.2f, 0.2f, 0.2f);
 drawCuboid(MIN_X-0.5, MAX_X+0.5f, MIN_Y-0.5, MIN_Y+0.5, MIN_Z-0.5f, MIN_Z+0.5f);
 drawCuboid(MIN_X-0.5, MAX_X+0.5f, MIN_Y-0.5, MIN_Y+0.5, MAX_Z-0.5f, MAX_Z+0.5f);
 drawCuboid(MIN_X-0.5, MAX_X+0.5f, MAX_Y-0.5, MAX_Y+0.5, MIN_Z-0.5f, MIN_Z+0.5f);
 drawCuboid(MIN_X-0.5, MAX_X+0.5f, MAX_Y-0.5, MAX_Y+0.5, MAX_Z-0.5f, MAX_Z+0.5f);
 drawCuboid(MIN_X-0.5, MIN_X+0.5f, MIN_Y-0.5, MAX_Y+0.5, MIN_Z-0.5f, MIN_Z+0.5f);
 drawCuboid(MIN_X-0.5, MIN_X+0.5f, MIN_Y-0.5, MAX_Y+0.5, MAX_Z-0.5f, MAX_Z+0.5f);
 drawCuboid(MAX_X-0.5, MAX_X+0.5f, MIN_Y-0.5, MAX_Y+0.5, MIN_Z-0.5f, MIN_Z+0.5f);
 drawCuboid(MAX_X-0.5, MAX_X+0.5f, MIN_Y-0.5, MAX_Y+0.5, MAX_Z-0.5f, MAX_Z+0.5f);
 drawCuboid(MIN_X-0.5, MIN_X+0.5f, MIN_Y-0.5, MIN_Y+0.5, MIN_Z-0.5f, MAX_Z+0.5f);
 drawCuboid(MIN_X-0.5, MIN_X+0.5f, MAX_Y-0.5, MAX_Y+0.5, MIN_Z-0.5f, MAX_Z+0.5f);
 drawCuboid(MAX_X-0.5, MAX_X+0.5f, MIN_Y-0.5, MIN_Y+0.5, MIN_Z-0.5f, MAX_Z+0.5f);
 drawCuboid(MAX_X-0.5, MAX_X+0.5f, MAX_Y-0.5, MAX_Y+0.5, MIN_Z-0.5f, MAX_Z+0.5f);

 glEnable(GL_BLEND);
 glDisable(GL_DEPTH_TEST);
 glColor4f(0.5f,1.0f,1.0f,0.12f);

 drawCuboid(MIN_X,MAX_X,MIN_Y,MAX_Y,MIN_Z,MAX_Z);

 glDisable(GL_BLEND);
 glEnable(GL_DEPTH_TEST);



【问题讨论】:

更好地缩进你的代码。 【参考方案1】:

对于不透明(非透明多边形): 启用 GL_DEPTH_TEST,并渲染所有这些。

对于透明多边形:保留GL_DEPTH_TEST,但使用glDepthMask(GL_FALSE)禁用深度写入,然后在渲染前从后到前对透明多边形进行排序。

另请参阅FAQ

【讨论】:

【参考方案2】:

我怀疑问题是由 drawContainer() 中的 glDisable(GL_DEPTH_TEST) 引起的。我建议注释掉 GL_DEPTH_TEST 行——在这种情况下,水族箱相对于桌子和地板是否正确?

【讨论】:

是的,这行得通:)。但只有在最后绘制水族馆时。我怀疑这可能是解决方案,但当时首先绘制了水族馆...... 您仍然需要对透明多边形进行排序。请参阅下面的答案。 我不知道为什么要这样做。现在它看起来就像我想从水族馆的任何一侧看到的那样。

以上是关于怎么画桌子的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL混合问题

MATLAB如何加入滑动条,并能让滑动条滑动且得到相应数值?(要求代码,画滑动条,得数值)

dxp中的标题栏怎么画

android中怎么画统计图

WPF怎么画圆

word怎么一页中画多个表格