2014-09-24 45 views
0

我剛纔下載的是如何下手FireMonkey 3D工作的例子,但不能重新編譯寫在早期的Delphi版本兩個代碼部分(我使用德爾福XE6):如何修改用舊的Firemonkey 3D編寫的代碼?

第1部分

[dcc32錯誤] 1單元.PAS(168):E2003未聲明的標識符: '材質'

var 
    Mesh1: TMesh; 
    BMP: TBitmap; 
//.... 
Mesh1.Material.Texture := BMP; 

第二部分,錯誤:

[dcc32錯誤] Unit1.pas(221):E2003未聲明的標識符: 'Vector3DAdd'

[dcc32錯誤] Unit1.pas(222):E2003未聲明的標識符: 'Vector3DScale'

var 
Camera1: TCamera; 
//.... 
Camera1.Position.Vector := Vector3DAdd(Camera1.Position.Vector, Vector3DScale(Vector3D(0, 0, 1), (WheelDelta/120) * 0.3)); 

如何改變它爲它可以在一個新的Delphi版進行編譯? 整個單元:

unit Unit1; 

interface 

uses 
    System.SysUtils, System.Types, System.UIConsts, System.UITypes, System.Classes, System.Variants, FMX.Types, 
    FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Objects3D, FMX.Types3D, FMX.Layouts, FMX.Layers3D, 
    System.Math.Vectors, FMX.Controls3D, FMX.MaterialSources, FMX.StdCtrls, FMX.Forms3D, FMX.Graphics; 

type 
    TForm1 = class(TForm3D) 
    Camera1: TCamera; 
    Mesh1: TMesh; 
    procedure FormMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; var Handled: Boolean); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    procedure GenerateMesh(Func: Integer); 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.fmx} 

uses Math; 

var 
    Down: TPointF; 

procedure TForm1.GenerateMesh(Func: Integer); 
var 
    BMP: TBitmap; 
    BD: TBitmapData; 
    k: Integer; 
begin 
    Mesh1.Data.Clear; 


    BMP := TBitmap.Create(1, 360); 
    BMP.Map(TMapAccess.ReadWrite, BD); 
    for k := 0 to 359 do 
    BD.SetPixel(0, k, CorrectColor(HSLtoRGB(k/360, 0.75, 0.5))); 
    BMP.Unmap(BD); 

// Mesh1.Material.Texture := BMP; 
end; 

procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; 
    var Handled: Boolean); 
begin 
// Camera1.Position.Vector := Vector3DAdd(Camera1.Position.Vector, 
// Vector3DScale(Vector3D(0, 0, 1), (WheelDelta/120) * 0.3)); 
end; 

end. 
+0

這將真正幫助,如果你想解釋一下是什麼問題,你與你貼的代碼有。你得到什麼編譯器錯誤?你是否看過XE6中的源代碼或文檔以查看是否可以找出它? Delphi的哪個版本是你下載的代碼? – 2014-09-24 17:13:22

+0

是的,當然,忘記了這個,問題就被修改了。 – Molochnik 2014-09-24 17:27:26

+0

是的,明白了:),我剛剛上傳了整個演示項目。鏈接在問題中。 – Molochnik 2014-09-24 17:50:52

回答

3

1)你必須保持TTextureMaterialSource部件,分配所期望的位圖後者的Texture屬性,並指定一個參考材料源分量以相機的MaterialSource屬性。

2)使用+*運營商:

var 
    Camera1: TCamera; 
//.... 
    Camera1.Position.Vector := Camera1.Position.Vector + 
    Vector3D(0, 0, 1) * ((WheelDelta/120) * 0.3);