游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2992|回复: 7

厚着脸皮求大家把下面的 Shader ASM 翻译成 HLSL

[复制链接]

42

主题

418

帖子

418

积分

中级会员

Rank: 3Rank: 3

积分
418
发表于 2005-8-24 16:09:00 | 显示全部楼层 |阅读模式
俺不会汇编,又急着想要,希望大家多包涵 [em10]
// v0    - Vertex Position
// v3    - Vertex Normal
// v7    - Vertex Texture Data u,v
// v8    - Vertex Tangent (v direction)
// v5    - Wave Height Scale
//
// c0    - { 0.0,  0.5, 1.0, 2.0}
// c1    - { 4.0, .5pi, pi, 2pi}  
// c2    - {1, -1/3!, 1/5!, -1/7!  }  //for sin
// c3    - {1/2!, -1/4!, 1/6!, -1/8!  }  //for cos
// c4-7 - Composite World-View-Projection Matrix
// c8     - ModelSpace Camera Position
// c9     - ModelSpace Light Position
// c10   - {fixup factor for taylor series imprecision, }(1.02, 0.1, 0, 0)
// c11   - {waveHeight0, waveHeight1, waveHeight2, waveHeight3}  (80.0, 100.0, 5.0, 5.0)
// c12   - {waveOffset0, waveOffset1, waveOffset2, waveOffset3}  (0.0, 0.2, 0.0, 0.0)
// c13   - {waveSpeed0, waveSpeed1, waveSpeed2, waveSpeed3}   (0.2, 0.15, 0.4, 0.4)
// c14   - {waveDirX0, waveDirX1, waveDirX2, waveDirX3}   (0.25, 0.0, -0.7, -0.8)
// c15   - {waveDirY0, waveDirY1, waveDirY2, waveDirY3}   (0.0, 0.15, -0.7, 0.1)
// c16   - { time, sin(time)}
// c17   - {basetexcoord distortion x0, y0, x1, y1} (0.031, 0.04, -0.03, 0.02)
// c18   - World Martix
vs.1.1

mul r0, c14, v7.x       // use tex coords as inputs to sinusoidal warp
mad r0, c15, v7.y, r0   // use tex coords as inputs to sinusoidal warp

mov r1, c16.x           //time...
mad r0, r1, c13, r0     // add scaled time to move bumps according to frequency
add r0, r0, c12         // starting time offset
frc r0.xy, r0           // take frac of all 4 components
frc r1.xy, r0.zwzw      //
mov r0.zw, r1.xyxy      //

mul r0, r0, c10.x       // multiply by fixup factor (due to inaccuracy)
sub r0, r0, c0.y        // subtract .5
mul r0, r0, c1.w        // mult tex coords by 2pi  coords range from(-pi to pi)

mul r5, r0, r0          // (wave vec)^2
mul r1, r5, r0          // (wave vec)^3
mul r6, r1, r0          // (wave vec)^4
mul r2, r6, r0          // (wave vec)^5
mul r7, r2, r0          // (wave vec)^6
mul r3, r7, r0          // (wave vec)^7
mul r8, r3, r0          // (wave vec)^8

mad r4, r1, c2.y, r0    //(wave vec) - ((wave vec)^3)/3!
mad r4, r2, c2.z, r4    //  + ((wave vec)^5)/5!
mad r4, r3, c2.w, r4    //  - ((wave vec)^7)/7!

mov r0, c0.z            //1
mad r5, r5, c3.x ,r0    //-(wave vec)^2/2!
mad r5, r6, c3.y, r5    //+(wave vec)^4/4!
mad r5, r7, c3.z, r5    //-(wave vec)^6/6!
mad r5, r8, c3.w, r5    //+(wave vec)^8/8!

sub r0, c0.z, v5.x      //... 1-wave scale
mul r4, r4, r0          // scale sin
mul r5, r5, r0          // scale cos
dp4 r0, r4, c11         //multiply wave heights by waves

mul r0.xyz, v3, r0      //multiply wave magnitude at this vertex by normal
add r0.xyz, r0, v0      //add to position
mov r0.w, c0.z          //homogenous component

m4x4    oPos, r0, c4    // OutPos = ObjSpacePos * World-View-Projection Matrix

mul     r1, r5, c11               //cos* waveheight
dp4     r9.x, -r1, c14            //normal x offset
dp4     r9.yzw, -r1, c15          //normal y offset and tangent offset

mov     r5, v3                    //starting normal
mad     r5.xy, r9, c10.y, r5      //warped normal move nx, ny according to
                                  //cos*wavedir*waveeheight

mov     r4, v8                    //tangent
mad     r4.z, -r9.x, c10.y, r4.z  //warped tangent vector  

mov     r10, r5
m3x3    r5, r10, c18       // transform normal
dp3     r10.x, r5, r5
rsq     r10.y, r10.x
mul     r5, r5, r10.y             //normalize normal

mov     r10, r4
m3x3    r4, r10, c18       // transform tangent
dp3     r10.x, r4, r4
rsq     r10.y, r10.x
mul     r4, r4, r10.y             //normalize tangent

mul     r3, r4.yzxw, r5.zxyw
mad     r3, r4.zxyw, -r5.yzxw, r3 //xprod to find binormal

mov     r10, r0
m4x4    r0, r10, c18       // transform vertex position

sub     r2, c8,  r0                //view vector
dp3     r10.x, r2, r2
rsq     r10.y, r10.x
mul     r2, r2, r10.y             //normalized view vector         

mov     r0, c16.x
mul     r0, r0, c17.xyxy
frc     r0.xy, r0             //frc of incoming time
add     r0, v7, r0            //add time to tex coords
mov     oT0, r0               //distorted tex coord 0

mov     r0, c16.x
mul     r0, r0, c17.zwzw
frc     r0.xy, r0             //frc of incoming time         
add     r0, v7, r0            //add time to tex coords
mov     oT1, r0.yxzw          //distorted tex coord 1

mov     oT2, r2               //pass in view vector (worldspace)
mov     oT3, r3               //binormal
mov     oT4, r4               //tangent
mov     oT5, r5               //normal


42

主题

418

帖子

418

积分

中级会员

Rank: 3Rank: 3

积分
418
 楼主| 发表于 2005-8-24 17:09:00 | 显示全部楼层

Re:厚着脸皮求大家把下面的 Shader ASM 翻译成 HLSL

脸皮厚到底,保持置顶
我顶。。。

42

主题

418

帖子

418

积分

中级会员

Rank: 3Rank: 3

积分
418
 楼主| 发表于 2005-8-25 08:47:00 | 显示全部楼层

Re:厚着脸皮求大家把下面的 Shader ASM 翻译成 HLSL

我再顶

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2005-8-25 09:25:00 | 显示全部楼层

Re:厚着脸皮求大家把下面的 Shader ASM 翻译成 HLSL

你就不能按着注释来自己写?!

42

主题

418

帖子

418

积分

中级会员

Rank: 3Rank: 3

积分
418
 楼主| 发表于 2005-8-25 10:40:00 | 显示全部楼层

Re:厚着脸皮求大家把下面的 Shader ASM 翻译成 HLSL

也在尝试,但俺没有学过汇编,又想急着要,请大家多包涵

42

主题

418

帖子

418

积分

中级会员

Rank: 3Rank: 3

积分
418
 楼主| 发表于 2005-8-25 14:05:00 | 显示全部楼层

Re:厚着脸皮求大家把下面的 Shader ASM 翻译成 HLSL

又沉了,再顶

20

主题

473

帖子

502

积分

高级会员

Rank: 4

积分
502
发表于 2005-8-25 16:45:00 | 显示全部楼层

Re:厚着脸皮求大家把下面的 Shader ASM 翻译成 HLSL

楼主要脚踏实地阿
把所有cXX常量先用变量代替
然后所有的rX寄存器全部用float4 变量代替
接下来,就一句一句的转换过来就可以了,别说汇编指令都不知道什么意思阿

这样写出来的应该可以通过hlsl编译

42

主题

418

帖子

418

积分

中级会员

Rank: 3Rank: 3

积分
418
 楼主| 发表于 2005-8-25 17:43:00 | 显示全部楼层

Re:厚着脸皮求大家把下面的 Shader ASM 翻译成 HLSL

多谢楼上这位老兄,我去试试看
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-27 13:37

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表