DNA的三维可视化:通过OpenGL实现一个DNA链

我最近在Coursera上开始了一门课程(数据库和算法,顺便提一句,这是普林斯顿大学开设的一门很牛的课程)。现在上了几次课,我发现这些编程课都相当困难,我的(自我缓解编程困难的)方法则是在OpenGL上编一些小东西来减压。

做三维模型编程最棒的一点就是你可以看到你代码的成果(这也是编程的一个动机)。3D编程是一个很强大的可视化工具,通过编码实现DNA的结构是一个有趣并且富有挑战性的任务。其具有挑战性主要是因为OpenGl代码所带来的局限性。我相信DNA结构在数学方面的实现是很简单的。

关于代码和DNA结构

1. DNA是双螺旋结构,有个带状结构从不同的角间距中连接着这两个螺旋。我用GL_QUADS来绘制两股螺旋和其中的带子。这些四边形的坐标可以通过以下方式来获得:

顶点的输入则是(10是双螺旋带的宽度)——

而b/w yOld1和yNew1之间的关系表达式如下:

2. 对于连接两个螺旋带的中间的带状,我用了C++中的结构体数组来存储x,y和z的值,它们相应的点都对应在两个螺旋带的连接点上,它们也是通过GL_QUADS来连接的。之后通过一个简单的”for“循环来连接它们。

我已经分别采取了+60和-60,+120和-120度的连接角,因此无论何时,在第一个螺旋上的经过角都为60度或60+360n度,或者第二个角上的120+360n度。我已经将x,y和z的对应值加到结构数组中去了。

之后一个简单的for循环将连接x,y和z与GL_QUADS来完成工作。

如果你想了解关于DNA链的颜色或是照明的信息,它是用(GL_DIFFUSE)分配给双螺旋和带子的一些材质。

下面是一些截图:

(分别为缩小图和特写图)

条带数可以通过增加n的值,减小连接角来一直增加,其中的n代表的就是条带的数目。

与此相关的也有许多很有趣,我想我将会尝试在某天做一个由球面(表示实际分子)组成的相同的DNA。

完整的代码将很快传到GitHub上!

更新——代码已经上传了,链接是:

https://github.com/soumitrasaxena/DNA

 

收藏 2 评论

关于作者:卷卷怪

(新浪微博:@卷卷_MeatLover) 个人主页 · 我的文章 · 1

相关文章

可能感兴趣的话题



直接登录
最新评论
  • sdf   2014/05/12

    OpenGL 代码以 shader 为主流,文章中的写法缺点很多,早已淘汰。

跳到底部
返回顶部