Graphics3D'de çokgen bir yüzey üzerine grafiti, yani metin nasıl yazılır?
Aug 17 2020
Graphics3D'de Çokgen [] üzerine Metin [] yerleştirmenin nispeten kolay bir yolu var mı? Örneğin, metnimin bakış açısı değiştikçe duvara sabitlenecek şekilde ekli resimdeki açık gri "duvar" üzerine yazılmış gibi görünmesini istiyorum.

Yanıtlar
5 TimLaska Aug 17 2020 at 10:17
Wolfram Dilinde Gelişmiş 3D Grafikler için Wolfram-U videosuna bir göz atıp dizüstü bilgisayarı indirirdim. billboard3D
Kodu aşağıdaki altı yüze "grafiti" içerecek şekilde uyarlayacağım için 22. slayta ve işleve bakın:
Clear[billboard3D];
billboard3D[s_,
width_, {x_, y_, z_}, {nx_, ny_, nz_}, {hx_, hy_, hz_}] :=
Module[{img = Rasterize[s, "Image", Background -> None], height},
height = width ImageAspectRatio[img];
{
FaceForm[White], EdgeForm[],
Texture[ImageData[img]],
GeometricTransformation[
Polygon[{{-.5 width, .5 height, 0}, {.5 width, .5 height,
0}, {.5 width, -.5 height, 0}, {-.5 width, -.5 height, 0}},
VertexTextureCoordinates -> {{0, 1}, {1, 1}, {1, 0}, {0, 0}}],
Quiet@
Composition[TranslationTransform[{x, y, z}],
RotationTransform[{{0, 1, 0}, {hx, hy, hz}}],
RotationTransform[{{0, 0, 1}, {nx, ny, nz}}]]]
}
];
Framed[
Graphics3D[{
(* Add a Plot3D Object *)
Plot3D[
0.9 Exp[-9 ((x - 1/2)^2 + (y - 1/2)^2)], {x, 0, 1}, {y, 0, 1},
PlotRange -> {0, 2}, ColorFunction -> "TemperatureMap",
PlotStyle -> Directive[Opacity[0.5], Red]][[1]],
(* View frustum *)
FaceForm[], EdgeForm[GrayLevel[.25]], Cuboid[],
(* Camera *)
FaceForm[GrayLevel[.25]], EdgeForm[], Specularity[White, 30],
Cuboid[{.45, -1, .4}, {.55, -1.3, .6}],
Cylinder[{{.475, -1.1, .65}, {.525, -1.1, .65}}, .05],
Cylinder[{{.475, -1.2, .65}, {.525, -1.2, .65}}, .05],
Cylinder[{{.5, -1, .5}, {.5, -.9, .5}}, .05],
Cylinder[{{.5, -1.15, .5}, {.5, -.9, 0}}, .01],
Cylinder[{{.5, -1.15, .5}, {.35, -1.3, 0}}, .01],
Cylinder[{{.5, -1.15, .5}, {.65, -1.3, 0}}, .01],
billboard3D[
Style["ViewPoint", 24, Bold,
FontFamily -> "Courier"], .4, {.5, -1.15, .8}, {1, 0, 0}, {0, 0,
1}],
(* View span *)
GrayLevel[.25],
With[{p = {.5, -.9, .5}},
Line[{{p, {0, 0, 0}}, {p, {1, 0, 0}}, {p, {0, 0, 1}}, {p, {1, 0,
1}}}]],
(* View angle *)
Gray, Dashed,
With[{p = {.5, -.9, .5}}, Line[{{p, {.5, 0, 1}, {.5, 0, 0}, p}}]],
Arrowheads[{-.015, .015}],
Arrow[BezierCurve[{{.5, -.5,
0.28}, {.5, -.4, .5}, {.5, -.5, .72}}]],
billboard3D[
Style["ViewAngle", 24, Bold,
FontFamily -> "Courier"], .3, {.5, -.4, .45}, {1, 0, 0}, {0, 0,
1}],
(* View vertical *)
billboard3D[
Style["ViewVertical", 24, Bold,
FontFamily -> "Courier"], .35, {.5, -.05, .75}, {1, 0,
0}, {0, -1, 0}],
(* View center *)
PointSize[Large], Point[{{.5, .5, .5}, {.5, 0, .5}}],
Arrowheads[.015], Arrow[{{.5, .5, .5}, {.5, 0, .5}}],
billboard3D[
Style["ViewCenter", 24, Bold,
FontFamily -> "Courier"], .25, {.5, .25, .55}, {1, 0, 0}, {0, 0,
1}],
(* View range *)
Gray,
Line[{{{1, 0, 0}, {1, 0, -.1}}, {{1, 1, 0}, {1, 1, -.1}}}],
Arrowheads[{-.02, .02}], Arrow[{{1, 0, -0.05}, {1, 1, -.05}}],
billboard3D[
Style["ViewRange", 24, Bold,
FontFamily -> "Courier"], .4, {1.075, .5, -.1}, {1, 0, 0}, {0, 0,
1}],
(* View left wall *)
billboard3D[
Style["Left Wall", 24, Bold, FontFamily -> "Courier"], .35, {0,
0.5, .5}, {1, 0, 0}, {0, 0, 1}],
(* View right wall *)
billboard3D[
Style["Right Wall", 24, Bold, FontFamily -> "Courier"], .35, {1,
0.5, .5}, {1, 0, 0}, {0, 0, 1}],
(* View top wall *)
billboard3D[
Style["Top Wall", 24, Bold, FontFamily -> "Courier"], .35, {0.5,
0.5, 1}, {0, 0, 1}, {0, 1, 0}],
(* View bottom wall *)
billboard3D[
Style["Bottom Wall", 24, Bold,
FontFamily -> "Courier"], .35, {0.5, 0.5, 0}, {0, 0, 1}, {0, 1,
0}],
(* View front wall *)
billboard3D[
Style["Front Wall", 24, Bold, FontFamily -> "Courier"], .35, {0.5,
0, 0.5}, {0, 0, 1}, {0, 0, 1}],
(* View back wall *)
billboard3D[
Style["Back Wall", 24, Bold, FontFamily -> "Courier"], .35, {0.5,
1, 0.5}, {0, 0, 1}, {0, 0, 1}]
},
Boxed -> False, ImageSize -> 750, Lighting -> "Neutral",
ViewPoint -> {5, -2, 1.5}
],
FrameMargins -> 20, FrameStyle -> GrayLevel[.75]]

Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı