如何计算对象上按下的UV纹理点?
例如:我有一个由地球紫外线地图纹理的球,我按下任何一个城市,我想得到一个关于地球上的城市的命运吗?
我要去尝试解释:) 我有一个代码:
bool draw;
int old_position_X;
int old_position_Y;
void __fastcall TForm1::Image3D(TObject *Sender, TShiftState Shift, float X,
float Y, TVector3D &RayPos, TVector3D &RayDir)
{
if (Shift.Contains(ssLeft))
{
if (draw==true)
{
TVector3D HitPos;
Image3D->Context->Pick(X, Y, TProjection::pjCamera, RayPos, RayDir);
RayCastPlaneIntersect(RayPos, RayDir, Image3D->AbsolutePosition, Image3D->AbsoluteDirection, HitPos) ;
HitPos.X -= Image3D->Position->X;
HitPos.Y -= Image3D->Position->Y;
int w=Image3D->Bitmap->Width;
int h=Image3D->Bitmap->Height;
int x=(w/Image3D->Width)*(HitPos.X+Image3D->Width/2.0);
int y=(h/Image3D->Height)*(HitPos.Y+Image3D->Height/2.0);
Image3D->Bitmap->Canvas->BeginScene();
Image3D->Bitmap->Canvas->Stroke->Kind=TBrushKind::bkSolid;
Image3D->Bitmap->Canvas->Stroke->Color=claRed;
Image3D->Bitmap->Canvas->DrawLine(TPointF(old_position_X,old_position_Y),TPointF(x,y),1.0);
Image3D->Bitmap->Canvas->EndScene();
old_position_X=x;
old_position_Y=y;
}
}
else
{
draw=false;
}
}
我可以缩放,旋转和移动Image3D,那些代码让我在Image3D上画画。
顺便说一句,我不明白为什么我必须将Image3D的宽度和高度除以2,但这可行:)我不明白3D对象值(比例,位置等)和像素之间的依赖关系。特别是刻度X,Y,Z和宽度,3D物体的高度......以及与纹理尺寸和3D物体比例的相关性......
现在,我想在导入的型号上做同样的事情。如何计算纹理上的位置。 我不指望完全代码,但我会要求指导,示例代码等
人
答案 0 :(得分:2)
通常的方法是: