??xml version="1.0" encoding="utf-8" standalone="yes"?>无码精品久久久久久人妻中字,国产成人综合久久久久久,亚洲国产精品一区二区三区久久http://m.shnenglu.com/wc250en007/category/13981.html前进的\?/description>zh-cnMon, 23 Jul 2012 08:02:48 GMTMon, 23 Jul 2012 08:02:48 GMT60glBlendFunc颜色混合http://m.shnenglu.com/wc250en007/archive/2012/07/18/184088.htmlLet me see seeLet me see seeWed, 18 Jul 2012 09:32:00 GMThttp://m.shnenglu.com/wc250en007/archive/2012/07/18/184088.htmlhttp://m.shnenglu.com/wc250en007/comments/184088.htmlhttp://m.shnenglu.com/wc250en007/archive/2012/07/18/184088.html#Feedback0http://m.shnenglu.com/wc250en007/comments/commentRss/184088.htmlhttp://m.shnenglu.com/wc250en007/services/trackbacks/184088.html阅读全文

Let me see see 2012-07-18 17:32 发表评论
]]>
GLUT框架http://m.shnenglu.com/wc250en007/archive/2010/06/19/glutFrame.htmlLet me see seeLet me see seeSat, 19 Jun 2010 03:11:00 GMThttp://m.shnenglu.com/wc250en007/archive/2010/06/19/glutFrame.htmlhttp://m.shnenglu.com/wc250en007/comments/118229.htmlhttp://m.shnenglu.com/wc250en007/archive/2010/06/19/glutFrame.html#Feedback0http://m.shnenglu.com/wc250en007/comments/commentRss/118229.htmlhttp://m.shnenglu.com/wc250en007/services/trackbacks/118229.htmlGLUT.H - 你需要在你的源代码中包含q个文g. 通常情况? q个文g应该攑֜你系l的包含目录下的 GL 文g夹中
GLUT.LIB (SGI windows版本) 以及 glut32.lib (微Y版本) - q个文g必须被连接到你的E序? 保它放?LIB 目录?
glut32.dll (Windows) ?glut.dll (SGI Windows版本) - Ҏ你所使用的OpenGL选择一? 如果你正在用微软公司的版本, 那么你必选择 glut32.dll. 你应该把DLL攄在你的系l文件夹?br>讄Visual C/C++ 6.0
Visual C/C++的工E有两个重要选项: Console (控制? ?Win32. 应用E序会有两个窗? 一个控制台H口, 以及一?OpenGL H口. 选择 Win32 仍然可以让你在不需要关心WindowsE序设计的情况下~写 GLUT E序. 你需要做以下讄:
选择 Project -> settings
选择 Link 选项?
?Category 中选择 Output
?Entry-point synmbol 文本框中键入 mainCRTStartup
对于已存在的控制台工E? 有一个简单的办法它转换成Win32应用E序:
Ҏ上面的步骤修改入口点
?Project options 文本框中?subsystem:windows 覆盖 subsystem:console
或者你可以直接在你的源代码开头处d:

代码

// #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )

注意: q是一行注释?br>如此一? 应用E序׃会出现控制台H口, 而只是一?OpenGL H口? 在Visual C/C++ 中你需要一下步骤来q接一?GLUT E序:
选择 Proejct/Settings
选择 LINK 选项?
d一下文件到 Object/library: opengl32.lib glut32.lib glu32.lib
h? 我同时添加了glu32.lib ?opengl32.lib. 他们是标准OpenGL?

好的,现在一切准备就l? 我们可以开始编?GLUT 应用E序? 如果有Q何不清楚的地? h告诉? 您的回馈非常之重?
?br>在这一节中, 我们会建造应用程序的d?main function). d数将会将会完成程序的初始化ƈ启动事g处理循环. 所有函数都有一个前~ glut , 初始化函数的前缀?glutInit. 我们首先必须调用函数 glutInit.
?br>代码

void glutInit(int *argc, char **argv);
//参数:
//argc - 一个指向主函数 argc 变量?未经修改 的指?
//argv - 一个指向主函数 argv 变量?未经修改 的指?
 
初始?GLUT 本n以后, 我们会定义我们的窗? 首先, 我们建立H口的位|? 例如: 在窗口的左上? 要实现这个功? 我们需要调用函?glutWindowsPosition.

代码

void glutInitWindowPosition(int x, int y);
//参数:
//x- 距离屏幕左边的像素数. 默认值是 -1, 由Windowspȝ军_H口的位|? 如果没有没有采用默认? 那么你应该用一个合适正g为实?
//y- 距离屏幕屏幕端的像素数, 其余同上.
h? q些参数只是l窗口管理器的一个徏议? 我们创徏的窗口可能会处于不同的位|上, 不过q很发? 接下来我们要军_H口的大? Z做到q一? 我们需要用函?glutInitWindowSize.

代码

void glutInitWindowSize(int width, int height);
参数:
width - H口的宽?br>height - H口的高?br>
同样? 高和宽也只是一个徏议? 请避免用负?
然后我们需要定义显C模? 我们使用 glutInitDisplayMode 函数.

代码

void glutInitDisplayMode(unsigned int mode)
参数:
mode - 指定昄模式?br>//mode 参数是一?GLUT 预定义常数的复合布尔?(位或). 你可以?mode 来指定颜? 以及~冲区的数量和类?

q些常数?
GLUT_RGBA or GLUT_RGB - 默认颜色模式
GLUT_INDEX - 颜色索引(?) 模式

昄模式允许你选择单或双缓冲区H口. 相关常数?
GLUT_SINGLE - 单缓冲区H口
GLUT_DOUBLE - 双缓冲区, qx动画需?br>
q里q有更多关于~冲区的常数:
GLUT_ACCUM - 聚集~冲?
GLUT_STENCIL - The stencil buffer (...译不出?
GLUT_DEPTH - 深度~冲?br>
现在, 假如你想要创Z个RGBH口, 单缓冲以及一个深度缓冲区. 你需要把相关的常数去 OR 在一h创徏一个正的常口

代码
...
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE | GLUT DEPTH);
...?br>l过以上步骤, 我们可以调用 glutCreateWindow 函数?br>
代码

int glutCreateWindow(char *title);

参数:
title - H口标题

glutCreateWindows 函数的返回值是索创建窗口的标示W? 你以后会用到q个标示W?
现在, 我们把上面的代码集合h, 看看一ơ完整的H口初始?

代码

#include

void main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(320,320);
glutCreateWindow("3D Tech- GLUT Tutorial");
}

h意包含文? 我们需?GLUT 的包含文?

如果你运行了q段代码, 那么你将看到一个黑色的控制台窗? 但是没有MOpenGLH口, 几秒钟以? q个H口也消׃. 在我们开始渲染之?我们q要做两件事? 首先是告?GLUT pȝ负责渲染的函?
我们来创Z个渲染函数的例子. q个函数会清空颜色~冲? q画Z个三角Ş:

代码

void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
 glVertex3f(-0.5,-0.5,0.0);
 glVertex3f(0.5,0.0,0.0);
 glVertex3f(0.0,0.5,0.0);
glEnd();
glFlush();
}

你可以给函数起Q意的名字. 然? 你必d?GLUT 来用这个函数进行渲? q叫?注册回叫(callback) 函数. GLUT 会在需要渲染的时候呼叫这个函? 现在我们来告?GLUT 一旦我们的H口被破?注意: 当窗口第一ơ被创徏的时? q个函数也会被呼?
, p用renderScene函数. GLUT 中有一个函数接受一个函数指针作为参? 它将q个指针指向的函C为渲染函?

代码

void glutDisplayFunc(void (*func)(void));
参数:
func - 渲染函数指针, NULL在这里非?

One last thing missing, that is telling GLUT that we're ready to get in the application event processing loop. GLUT provides a function that gets the application in a never ending loop, always waiting for the next event to process. The GLUT function is glutMainLoop, and the syntax is as follows:

我们最后要? 是让程序进入事件处理@? GLUT l我们准备了一个函数来使程序进入一个无限@?d@?, 永远在等待下一个需要处理的事g. q个函数是 glutMainLoop:

代码

void glutMainLoop(void)

The code so far is presented bellow. Note that we've added an include statement in order to start using standard OpenGL functions, like glClear, glBegin, glVertex3f, and glEnd.

以下是完整的代码. 我们d了一个新的包含文? 以便于我们用OpenGL的函? 比如 glClear, glBegin, glVertex3f ?glEnd.

如果你运行这你将会看C个控制台H口, 然后是一个画有白色三角ŞOpenGLH口

代码

#include "gl/glut.h"
void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glVertex3f(-0.5,-0.5,0.0);
glVertex3f(0.5,0.0,0.0);
glVertex3f(0.0,0.5,0.0);
glEnd();
glFlush();
}

void main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(320,320);
glutCreateWindow("3D Tech- GLUT Tutorial");
glutDisplayFunc(renderScene);
glutMainLoop();
}


、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、?br>转自Q?a >http://blog.tianya.cn/blogger/post_show.asp?BlogID=80680&PostID=2276189&idWriter=0&Key=0

出现无法解析W号Q?br>
  1. 1>GEARS.obj : error LNK2019: 无法解析的外部符?nbsp;___glutInitWithExit@12Q该W号在函?nbsp;_glutInit_ATEXIT_HACK@8 中被引用   
  2. 1>GEARS.obj : error LNK2019: 无法解析的外部符?nbsp;___glutCreateWindowWithExit@8Q该W号在函?nbsp;_glutCreateWindow_ATEXIT_HACK@4 中被?/span>

      glut.h的文件内?/span>于是Q?br>      Note that the __glut*WithExit routines should NEVER be called directly. 
      To avoid the atexit workaround, #define GLUT_DISABLE_ATEXIT_HACK. 
      ?include <GL/glut.h>前面加上了一句: 
 
      #define GLUT_DISABLE_ATEXIT_HACK   


参考GLUTAPIQ?a >http://www.opengl.org/documentation/specs/glut/spec3/spec3.html
GLUTFrame实例下蝲


Let me see see 2010-06-19 11:11 发表评论
]]>
使用OpenGL实现三维坐标的鼠标拣选( ?Q?/title><link>http://m.shnenglu.com/wc250en007/archive/2010/06/07/SelectObj.html</link><dc:creator>Let me see see</dc:creator><author>Let me see see</author><pubDate>Mon, 07 Jun 2010 06:56:00 GMT</pubDate><guid>http://m.shnenglu.com/wc250en007/archive/2010/06/07/SelectObj.html</guid><wfw:comment>http://m.shnenglu.com/wc250en007/comments/117319.html</wfw:comment><comments>http://m.shnenglu.com/wc250en007/archive/2010/06/07/SelectObj.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/wc250en007/comments/commentRss/117319.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/wc250en007/services/trackbacks/117319.html</trackback:ping><description><![CDATA[我们可以通过gluUnProject函数来求得世界坐?br> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> ILGameModule::getWorldPos( </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> x, </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> y, vec3</span><span style="COLOR: #000000">&</span><span style="COLOR: #000000"> vWorld )<br><img id=Codehighlighter1_61_756_Open_Image onclick="this.style.display='none'; Codehighlighter1_61_756_Open_Text.style.display='none'; Codehighlighter1_61_756_Closed_Image.style.display='inline'; Codehighlighter1_61_756_Closed_Text.style.display='inline';" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_61_756_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_61_756_Closed_Text.style.display='none'; Codehighlighter1_61_756_Open_Image.style.display='inline'; Codehighlighter1_61_756_Open_Text.style.display='inline';" src="http://m.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_61_756_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://m.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_61_756_Open_Text><span style="COLOR: #000000">{<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    JFIX vx </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (JFIX)x;<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    JFIX vy </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (JFIX)camera</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">viewport.h </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> y;<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    JFIX winz </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">.f;<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    glReadBuffer(GL_FRONT);<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    glReadPixels( (JINT)vx, (JINT)vy, </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">, GL_DEPTH_COMPONENT, GL_FLOAT ,</span><span style="COLOR: #000000">&</span><span style="COLOR: #000000">winz );<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">winz = getWinDepth( camera, 1.f );</span><span style="COLOR: #008000"><br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">    GLdouble model[ </span><span style="COLOR: #000000">16</span><span style="COLOR: #000000"> ];<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    GLdouble project[</span><span style="COLOR: #000000">16</span><span style="COLOR: #000000">];<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    <br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    mat4 matView </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> camera</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">modelView.transpose();<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    mat4 matProj </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> camera</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">projection.transpose();<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    JFIX</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> pm </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> matView.ptr();<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    JFIX</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> pj </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> matProj.ptr();<br><img id=Codehighlighter1_512_581_Open_Image onclick="this.style.display='none'; Codehighlighter1_512_581_Open_Text.style.display='none'; Codehighlighter1_512_581_Closed_Image.style.display='inline'; Codehighlighter1_512_581_Closed_Text.style.display='inline';" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_512_581_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_512_581_Closed_Text.style.display='none'; Codehighlighter1_512_581_Open_Image.style.display='inline'; Codehighlighter1_512_581_Open_Text.style.display='inline';" src="http://m.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">( </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; i </span><span style="COLOR: #000000"><</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">16</span><span style="COLOR: #000000">; i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000"> )</span><span id=Codehighlighter1_512_581_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://m.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_512_581_Open_Text><span style="COLOR: #000000">{<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>        model[i] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (GLdouble)(pm[i]);<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>        project[i] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (GLdouble)(pj[i]);<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</span></span><span style="COLOR: #000000">    <br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    GLdouble lx,ly,lz;<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    gluUnProject( vx, vy, winz, model,project,(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&</span><span style="COLOR: #000000">camera</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">viewport, </span><span style="COLOR: #000000">&</span><span style="COLOR: #000000">lx, </span><span style="COLOR: #000000">&</span><span style="COLOR: #000000">ly, </span><span style="COLOR: #000000">&</span><span style="COLOR: #000000">lz );<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    vWorld.x </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (JFIX)lx;<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    vWorld.y </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (JFIX)ly;<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    vWorld.z </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (JFIX)lz;<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div> <br>求出的世界坐标MS不符合我们的要求Q例如我点击了世界坐标的点击屏幕(sx,sy),利用getWorldPosq原后的世界坐标为(100Q?00Q?0 Q,在(100Q?00Q?0Q这个点L型,<br> 的确在鼠标点M|,问题出现? q原后的世界坐标Z = 20,但是我们ȝ物体的高度要求是0的话Q紧贴地面,会出现模型QI?br> 仅仅Z=0Q却使得点击仿佛偏移?br><img height=236 alt="" src="http://m.shnenglu.com/images/cppblog_com/wc250en007/selectObj.jpg" width=632 border=0><br>我们需要知道在拣选射U和我们x定的高度面(如Z=0面)的交点,q个交点可定也在拣选射U上 vIntersection  = vWorld + vOffset;<br>卛_我们得到的世界坐标基上,加上拣选射U的一个偏Ud就得到了我们的交点QX', Y', 0 Q?br><img height=249 alt="" src="http://m.shnenglu.com/images/cppblog_com/wc250en007/selectObj2.jpg" width=522 border=0><br> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">//</span><span style="COLOR: #008000">vWorld世界坐标 PLANE_Z Zq面, Z=0q面,q回和当前面怺的交?/span><span style="COLOR: #008000"><br><img src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">snapWorldPos( vWorld, PLANE_Z, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">&</span><span style="COLOR: #000000">vWorld );<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> ILGameModule::snapWorldPos( vec3</span><span style="COLOR: #000000">&</span><span style="COLOR: #000000"> vWorld, JINT nPlane, JFIX dist, vec3</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> pOut )                 // dist是当前怺的面Q以后也可以传入当前地Ş的高度getHeight(vWorld)<br><img id=Codehighlighter1_173_593_Open_Image onclick="this.style.display='none'; Codehighlighter1_173_593_Open_Text.style.display='none'; Codehighlighter1_173_593_Closed_Image.style.display='inline'; Codehighlighter1_173_593_Closed_Text.style.display='inline';" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_173_593_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_173_593_Closed_Text.style.display='none'; Codehighlighter1_173_593_Open_Image.style.display='inline'; Codehighlighter1_173_593_Open_Text.style.display='inline';" src="http://m.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_173_593_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://m.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_173_593_Open_Text><span style="COLOR: #000000">{<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    vec3 vdir </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> camera</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">pos </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> vWorld;<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    vdir.normalise();<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    vec3 vPlane;<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    </span><span style="COLOR: #0000ff">switch</span><span style="COLOR: #000000">( nPlane )<br><img id=Codehighlighter1_263_404_Open_Image onclick="this.style.display='none'; Codehighlighter1_263_404_Open_Text.style.display='none'; Codehighlighter1_263_404_Closed_Image.style.display='inline'; Codehighlighter1_263_404_Closed_Text.style.display='inline';" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_263_404_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_263_404_Closed_Text.style.display='none'; Codehighlighter1_263_404_Open_Image.style.display='inline'; Codehighlighter1_263_404_Open_Text.style.display='inline';" src="http://m.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </span><span id=Codehighlighter1_263_404_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://m.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_263_404_Open_Text><span style="COLOR: #000000">{<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    </span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000"> PLANE_X: vPlane </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> vec3( </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000"> ); </span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    </span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000"> PLANE_Y: vPlane </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> vec3( </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000"> ); </span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    </span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000"> PLANE_Z: vPlane </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> vec3( </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000"> ); </span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</span></span><span style="COLOR: #000000"><br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    JFIX rate;<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    JFIX nf </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> vdir.dot(vPlane);<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> ( nf </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">.f ) rate </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">.f;<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>        rate </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ( </span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> dist </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"> vWorld.dot(vPlane) )</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">nf;<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>    <br><img id=Codehighlighter1_547_591_Open_Image onclick="this.style.display='none'; Codehighlighter1_547_591_Open_Text.style.display='none'; Codehighlighter1_547_591_Closed_Image.style.display='inline'; Codehighlighter1_547_591_Closed_Text.style.display='inline';" src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_547_591_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_547_591_Closed_Text.style.display='none'; Codehighlighter1_547_591_Open_Image.style.display='inline'; Codehighlighter1_547_591_Open_Text.style.display='inline';" src="http://m.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> ( pOut )</span><span id=Codehighlighter1_547_591_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://m.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_547_591_Open_Text><span style="COLOR: #000000">{<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>        vdir </span><span style="COLOR: #000000">*=</span><span style="COLOR: #000000"> rate;<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/InBlock.gif" align=top>        </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pOut </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> vWorld </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> vdir;<br><img src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</span></span><span style="COLOR: #000000"><br><img src="http://m.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div> <img src ="http://m.shnenglu.com/wc250en007/aggbug/117319.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/wc250en007/" target="_blank">Let me see see</a> 2010-06-07 14:56 <a href="http://m.shnenglu.com/wc250en007/archive/2010/06/07/SelectObj.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用OpenGL实现三维坐标的鼠标拣选(一 Q??/title><link>http://m.shnenglu.com/wc250en007/archive/2010/06/05/OpenGLSelect.html</link><dc:creator>Let me see see</dc:creator><author>Let me see see</author><pubDate>Sat, 05 Jun 2010 10:45:00 GMT</pubDate><guid>http://m.shnenglu.com/wc250en007/archive/2010/06/05/OpenGLSelect.html</guid><wfw:comment>http://m.shnenglu.com/wc250en007/comments/117235.html</wfw:comment><comments>http://m.shnenglu.com/wc250en007/archive/2010/06/05/OpenGLSelect.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/wc250en007/comments/commentRss/117235.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/wc250en007/services/trackbacks/117235.html</trackback:ping><description><![CDATA[使用OpenGL实现三维坐标的鼠标拣?br>Implementation of RIPQRay-Intersection-PenetrationQ?br>3D Coordinates Mouse Selection Using OpenGL <br>??Q武汉理工大?计算机系 中科院智能设计与刉研I所 湖北武汉 430070Q?br>摘要QAbstractQ:<br>本文提出q实CU用于三l坐标拣选的RIPQRay-Intersection-PenetrationQ方法。介l了如何在已l渲染至H口的三l场?br>中,使用鼠标或者相兌备拣选特定三l对象的Ҏ。此Ҏ对于正交投媄或透视投媄均有效,相对于OpenGL自带的选择与反馈机Ӟ本方法无论是拣选精?br>q是法实现效率均高多,是一U比较通用的解x案。关键词QKeywordsQ?正交投媄QOrtho-ProjectionQ、透视投媄QPerspective-ProjectionQ?br>世界坐标pR屏q坐标系、三l拣选、OpenGL <br>一、简介(IntroductionQ?br>OpenGL是一U比?#8220;Ua”?D囑ŞAPIQ一般仅用于三维囑Ş的渲染,对于特定领域的开发者(如游戏开发者)而言Q如果选择使用<br>OpenGLq行开发,cM撞的机制都需要自行编写了。但是由于鼠标在囑ŞE序中的应用非常非常之广泛(例如现在已经很少有PC游戏能完全地q<br>鼠标Q,OpenGL在图形库的基上添加了选择与反馈机ӞSelect &<br>FeedbackQ来满用户使用鼠标实时操作三维囑Ş的需要。但׃U种原因Q我们需要更为特D的选择机制以满特定需求,在这里我们提Z一U简单迅<br>速的RIPQRay-Intersection-PenetrationQ方法,可以满l大多数典型应用的需要?br>二、相关研IӞRelated WorkQ?用过OpenGL选择与反馈机制的开发者,或多或少可能都会觉得它难以o人满意。大致表现在下面几个斚wQ?br>一?~写E序比较J琐?br>惌使用选择反馈机制需要切换渲染模式,操作命名堆栈Q计拣选矩阵,查选中记录Q这些繁琐的步骤很容易出错,而且非常不便于调试,只会降低工作效率和热情。二?只能做基于图元的选定?br>?br>下图Q? – aQ,使用GL_TRIANGLESl制了一个三角ŞQ三个顶点分别ؓ<br>P1、P2和P3。若使用该机Ӟ你将只能判断是否在三l场景中选中了这个三角ŞQ用Ld是否在P1、P2和P3的范围内Q,而无法判断用h点击?br>q个三角形哪一部分Q是左边的m区域内还是右边的n区域内)Q因为所l制的P1、P2和P3本n构成的三角Ş是一个基本图元,对于拣选机制而言是不可分<br>的。当Ӟ把这个三角Ş拆成两个三角形再分别q行试也是一个可行的ҎQ可是看看图Q? – bQ,q可怎么拆呢Q还有图Q? –<br>cQ呢Q另外,如果n和m两个q面不共面呢Q对于用者而言QOpenGL提供的拣选机制功能的有限?br><img height=245 alt="" src="http://m.shnenglu.com/images/cppblog_com/wc250en007/select.jpg" width=514 border=0><br>三、降低了渲染效率?br>OpenGL<br>中的选择和反馈是与普通渲染方式不同的一U特D的渲染方式。我们用时一般是先在帧缓存中渲染普通场景,然后q入选择模式重绘场景Q此时~存的内容ƈ?br>变化。也是_Z选择某些物体Q我们需要在一帧中使用不同的渲染方式将其渲染两遍。我们知道对对象q行渲染是比较耗时的操作,当场景中需要选择的对?br>多而杂的时候,采用q个机制是非常媄响速度的?br>另外在OpenGLU宝书中介绍了一U简便易行的办法Q在后缓冲中使用不同的颜色重l所有对象,每个对象用一个单色来标示光Ԍq样d之后我们d?br>标所在点的颜Ԍp够确定我们拣选了哪个物体。这U方法有一个缺P当场景中需要选择的对象的数目出一定限度时Q可能会出现标识数的溢出。对于这个问<br>题,U宝书给出的解决办法是多次扫描。实践证明这U方法的简便易行,但仍有不局限性,而且做v来ƈ不比W一U机制方便多。限于篇q,不再赘述。三、具体描qͼRelated WorkQ?看过了上面两U方法,我们会发现这两种Ҏ都不是十分的方便Q而且使用者不能对其进行完全的控制Q不能精地判定鼠标定位与实际的世界I间中三l坐标的关系。那么有什么更好的办法能够更简单更_地对其加以控制呢Q?实际上此处给出的解决Ҏ十分单,是一个很普通也很有用的 GLU 函数 gluUnProject()?br>此函数的具体用途是一个OpenGL视区内的二维点{换ؓ与其对应的场景中的三l坐标?br>转换q程如下图所C(qP在窗口中的XY坐标得到其在三维I间中的世界坐标Q:<br><img height=210 alt="" src="http://m.shnenglu.com/images/cppblog_com/wc250en007/select2.jpg" width=538 border=0><br>q个函数在glu.h中的原型定义如下Qint APIENTRY gluUnProject (<br>GLdouble winx, <br>GLdouble winy, <br>GLdouble winz, <br>const GLdouble modelMatrix[16], <br>const GLdouble projMatrix[16], <br>const GLint viewport[4], <br>GLdouble *objx, <br>GLdouble *objy, <br>GLdouble *objz);  其中前三个DC窗口坐标,中间三个分别为模型视囄阵(Model/View MatrixQ,投媄矩阵QProjection MatrixQ和视区QViewPortQ,最后三个ؓ输出的世界坐标倹{  可能你会问:H口坐标不是只有X轴和Y轴两个gQ怎么q里q有Z|q就要从二维I间与三l空间的关系说v了。 <br> 众所周知Q我们通过一个放|在三维世界中的摄像机,来观察当前场景中的对象。通过使用诸如gluPerspective()<br>q样的OpenGL函数Q我们可以设|这个摄像机所能看到的视野的大范围。这个视野的边界所围成的几何体是一个标准的qx头体QFrustumQ,可以<br>看做是金字塔状的几何体削去金字塔的上半部分后形成的一个台状物Q如果还原成金字塔状Q就得到了通常我们所说的视锥QView<br>FrustumQ这个视锥的锥顶是视点QView PointQ也是摄像机所在的位置。^截头体,视锥以及视点之间的关p,如下图所C:<br><img height=317 alt="" src="http://m.shnenglu.com/images/cppblog_com/wc250en007/select3.jpg" width=324 border=0><br>在上面的图中Q远裁剪面ABCD和近裁剪面A’B’C’D’构成了^截头体,加上虚线部分是视锥Q顶点O是摄像机所在的视点。我们在H口中所能看到的东东Q全部都在此qx头体内。这跟前面的H口坐标Z值有什么关pdQ看下图<br><img height=304 alt="" src="http://m.shnenglu.com/images/cppblog_com/wc250en007/select4.jpg" width=344 border=0><br>?br>此图所C,点P和点P’分别在远裁剪面ABCD和近裁剪面A’B’C’D’上。我们点dq上的点PQ反映到视锥中,是选中了所有的从点P到点P’?br>炏VD个Ş象的例子Q这像是我们挽弓放,如果出ȝ近乎笔直地飞出Q假讑֊量非怹大近乎无IPQ从挽弓的地点直臛_中目标,在这条直U的轨迹?br>M物体都将被一I而过。对应这里的情况Q用户单击鼠标获得屏q上的某一点,x指定了从视点指向屏幕深处的某一方向Q也q定了屏幕上某条从O点出发的<br>线Q在图中即ؓOPQ。在q里Q我们称呼其为拣选射Uѝ?br>因此Q从H口的XY坐标Q我们仅仅只能获得一条出发自O点的拣选射U,q不能得到用h要的点在q条线上的切位置?br>q时候窗口坐标的Z值就能派上用Z。我们通过Z|来指定我们想要的点在线上的位置。假如用LM屏幕上的点(100,100Q得Cq条线OPQ那么我们传入?.0fpC裁剪面上的P点,而?.0f则对应远裁剪面上的P’炏V?br>q?br>P我们通过引入一个窗口坐标的Z|p指定视锥内Q意点的三l坐标。与此同Ӟ我们q解决了前面U宝书给出的Ҏ中存在的~陷——同一位置上重叠物?br>的选择问题。解军_法是Q从屏幕坐标得到线之后Q分别让重叠的物体与该射U求交,得到的交点,然后Ҏq些与视点的q近定选择的对象。如此我们就不必<br>?#8220;仅仅只能选取屏幕中离观察者最q的物体”的限制了。这样一来,如果需要的话,我们甚至可以用代码来作一定的限定Q通过判断交点与视点的距离Q得与?br>拣选射U相交的物体中,视点远的对象才能被选取Q这样就能够寚w些暂时被其他对象遮住的物体进行选取?br>至于如何求拣选射U与对象的交点,在各U图形学的书中的数学部分均有讲述Q在此不再赘q?br>四、例E(Sample Code FragmentQ?br><br>前面讲述了RIPҎQ现在我们来看如何编写代码以实现之,以及一些需要注意的问题?br>׃拣选射U以U段形式存储更加便于后面的计,况且我们可以直接得到U跨整个qx头体的线D(卛_面图中的U段PP’Q,故我们直接计出q条q接q近裁剪面的U段。我们将拣选射U的U段形式UC为拣选线Dc?<br>在下面的代码前方声明有两个类Point3f和LineSegmentq分别表C由三个点数构成的三维I间中的点,以及׃个点构成的空间中的一条线Dc?br>应注意代码中用到了类Point3f的一个需要三个Q点参数的构造函敎ͼ以及cLineSegment的一个需要两个点参数的构造函数?br>获取拣选射U的例程如下所C(使用C++语言~写Q:class Point3f;<br>class LineSegment;<br>LineSegment GetSelectionRay(int mouse_x, int mouse_y) {<br>// 获取 Model-View、Projection 矩阵 & 获取Viewport视区<br>GLdouble modelview[16];<br>GLdouble projection[16];<br>GLint viewport[4];<br>glGetDoublev (GL_MODELVIEW_MATRIX, modelview);<br>glGetDoublev (GL_PROJECTION_MATRIX, projection);<br>glGetIntegerv (GL_VIEWPORT, viewport); GLdouble world_x, world_y, world_z; // 获取q裁剪面上的交点<br>gluUnProject( (GLdouble) mouse_x, (GLdouble) mouse_y, 0.0, <br>modelview, projection, viewport, <br>&world_x, &world_y, &world_z); <br>Point3f near_point(world_x, world_y, world_z); // 获取q裁剪面上的交点<br>gluUnProject( (GLdouble) mouse_x, (GLdouble) mouse_y, 1.0, <br>modelview, projection, viewport, <br>&world_x, &world_y, &world_z); <br>Point3f far_point(world_x, world_y, world_z); return LineSegment(near_point, far_point);<br>}<br><br>如果你是使用Win32q_q行开发,那么应当注意传入正确的参数。因为无论是使用Win32 API q是DirectInput<br>来获取鼠标坐标,得到的Y值都应取反后再传入。因为OpenGL默认的原点在视区的左下角QY轴从左下角指向左上角Q而Windows默认的原点在H口?br>左上角,而Y轴方向与OpenGL相反Q从左上角指向左下角。如下图所C:<br><img height=169 alt="" src="http://m.shnenglu.com/images/cppblog_com/wc250en007/select5.jpg" width=491 border=0><br>我们可以看到代码被注释分Z三个部分Q获取当前矩阵及视区Q获取近裁剪面的交点Q获取远裁剪面的交点?br>我们通过OpenGL提供的查询函数轻村־到当前的ModelView和Projection矩阵Q以及当前的ViewportQ视区,也就是窗口的客户端区域,如果整个H口区域用于OpenGL渲染的话Q?br>获得两个裁剪面上的交点的代码基本上是一LQ唯一的不同点是我们前面曾l详l地讨论q的H口的Z坐标。不错,q个坐标表示的就?#8220;深浅”的概c它的g点P’到点P的变化是?.0f逐渐增至1.0f。此处类gOpenGL的深度测试机制?br>在得C个交点之后,我们使用它们通过q回语句直接构徏一条线Dc在q里仅仅作ؓ实例代码Q故h晰地直接q回U段对象Q而没有通过引用参数来提高效率?br>?br>时用户可以用这个函数来判断所选择的对象了。只需在需要的地方判断对象是否与此U段怺卛_判断对象是否被选中Q还可以通过q一步计其交点位置来得?br>详细的交点信息。这些计均是常见的计算机图形学与三l数学计,比如U段与三角Ş求交Q线D与面求交,U段与球体求交,U段与柱体或锥体求交Q等{。请<br>参考所列出的计机囑Ş学书c?br>五、结论(ConclusionQ?br><br>在本文中Q我们介l了一U行之有效的三维坐标拑֏ҎQ主要用GLU库中的实用工具实现。这U方法速度快,效率高,能在不必重新l制对象的前提下完成拣选工作。对比OpenGL自带的拣选机制来看,RIP的确在各U方面均有一定的优势?br>六、参考文献(ReferenceQ??】《OpenGL Programming Guide?br>OpenGL ARB Mason Woo, Jackie Heider, Tom Davis, Dave Shreiner<br>?】《OpenGL Reference Manual?br>OpenGL ARB<br>?】《Computer Graphics?br>Donald Heam, M. Pauline Baker<br>?】《Computer Graphics using OpenGL 2nd Edition?br>F.S. Hill, JR.<br> <img src ="http://m.shnenglu.com/wc250en007/aggbug/117235.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/wc250en007/" target="_blank">Let me see see</a> 2010-06-05 18:45 <a href="http://m.shnenglu.com/wc250en007/archive/2010/06/05/OpenGLSelect.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://m.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.yshome.net.cn" target="_blank">˾Ʒþ</a>| <a href="http://www.93jk.cn" target="_blank">޾Ʒþǧն</a>| <a href="http://www.popotang.cn" target="_blank">99þþƷ⿴һ</a>| <a href="http://www.jixianfengzx.cn" target="_blank">þ޾Ʒa</a>| <a href="http://www.zongjiagou.com.cn" target="_blank">޹㽶þþþþ</a>| <a href="http://www.frwg.net.cn" target="_blank">þþþþϸ</a>| <a href="http://www.nxol.net.cn" target="_blank">Ļþ</a>| <a href="http://www.guceka.cn" target="_blank">þþþþþۺ</a>| <a href="http://www.beo.net.cn" target="_blank">þҹɫƷ</a>| <a href="http://www.lyfulinmen.com.cn" target="_blank">˾þۺϾƷAVר</a>| <a href="http://www.pedl.cn" target="_blank">޹Ʒþþþ</a>| <a href="http://www.vtsg.cn" target="_blank">ɫþþþۺ</a>| <a href="http://www.tjyizhao.cn" target="_blank">þˬˬƬAV </a>| <a href="http://www.dmqdgs.cn" target="_blank">þҹɫƷ</a>| <a href="http://www.egpk.cn" target="_blank">þþ޾Ʒһ</a>| <a href="http://www.akeyu.cn" target="_blank">þ޾Ʒ</a>| <a href="http://www.shidaqizhong.cn" target="_blank">þ99ƷþþþþҰ</a>| <a href="http://www.yangfenghua.cn" target="_blank">ɫվWWWþþž</a>| <a href="http://www.yanggroup.cn" target="_blank">Ļ˾Ʒþò</a>| <a href="http://www.gynp.net.cn" target="_blank">aѹۿþav</a>| <a href="http://www.w4749.cn" target="_blank">ҹƷƬþӰ </a>| <a href="http://www.pophyh.cn" target="_blank">þٸ۲AV</a>| <a href="http://www.jihejingjia.cn" target="_blank">պ޾Ʒþ</a>| <a href="http://www.suoguai.cn" target="_blank">˼˼þ99ֻƵƷ66</a>| <a href="http://www.qkqkkq.cn" target="_blank">þùۺϾƷ</a>| <a href="http://www.ccguofeng.cn" target="_blank">þþþþþ99Ʒѹۿ</a>| <a href="http://www.qdog.com.cn" target="_blank">þþþһƷɫav </a>| <a href="http://www.sansiwu.cn" target="_blank">˾þۺ</a>| <a href="http://www.mono2018.cn" target="_blank">þ붯aëƬ</a>| <a href="http://www.ksszzyy.cn" target="_blank">þ99Ʒ</a>| <a href="http://www.gkbv.cn" target="_blank">һþaþþƷۺ</a>| <a href="http://www.test-mts.cn" target="_blank">þ99ۺϾƷ</a>| <a href="http://www.gdhaojulai.cn" target="_blank">ھƷžžþþƷ</a>| <a href="http://www.h8uq0.cn" target="_blank">޹þþþƷС˵</a>| <a href="http://www.e7sport.cn" target="_blank">þAV</a>| <a href="http://www.emitel.cn" target="_blank">պŷۺϾþ </a>| <a href="http://www.168lala.cn" target="_blank">Ʒ9999þþþ</a>| <a href="http://www.bisibbs.cn" target="_blank">þùɫAVѿ</a>| <a href="http://www.gn-online.com.cn" target="_blank">þþþþþŮú</a>| <a href="http://www.geekon.com.cn" target="_blank">޾Ʒtvþþþ</a>| <a href="http://www.rideos.cn" target="_blank">˳վ999þþۺ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>