MWS_2021/Wirtualne światy ĆW1.html
duszekjk 81c6814e16 cw1
2021-03-14 07:38:52 +01:00

1419 lines
98 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html>
<head>
<meta charset='UTF-8'><meta name='viewport' content='width=device-width initial-scale=1'>
<title>Wirtualne światy ĆW1</title><style type='text/css'>html {overflow-x: initial !important;}:root { --bg-color: #ffffff; --text-color: #333333; --select-text-bg-color: #B5D6FC; --select-text-font-color: auto; --monospace: "Lucida Console",Consolas,"Courier",monospace; --title-bar-height: 20px; }
.mac-os-11 { --title-bar-height: 28px; }
html { font-size: 14px; background-color: var(--bg-color); color: var(--text-color); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; }
body { margin: 0px; padding: 0px; height: auto; bottom: 0px; top: 0px; left: 0px; right: 0px; font-size: 1rem; line-height: 1.42857143; overflow-x: hidden; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: inherit; tab-size: 4; background-position: inherit inherit; background-repeat: inherit inherit; }
iframe { margin: auto; }
a.url { word-break: break-all; }
a:active, a:hover { outline: 0px; }
.in-text-selection, ::selection { text-shadow: none; background: var(--select-text-bg-color); color: var(--select-text-font-color); }
#write { margin: 0px auto; height: auto; width: inherit; word-break: normal; word-wrap: break-word; position: relative; white-space: normal; overflow-x: visible; padding-top: 36px; }
#write.first-line-indent p { text-indent: 2em; }
#write.first-line-indent li p, #write.first-line-indent p * { text-indent: 0px; }
#write.first-line-indent li { margin-left: 2em; }
.for-image #write { padding-left: 8px; padding-right: 8px; }
body.typora-export { padding-left: 30px; padding-right: 30px; }
.typora-export .footnote-line, .typora-export li, .typora-export p { white-space: pre-wrap; }
.typora-export .task-list-item input { pointer-events: none; }
@media screen and (max-width: 500px) {
body.typora-export { padding-left: 0px; padding-right: 0px; }
#write { padding-left: 20px; padding-right: 20px; }
.CodeMirror-sizer { margin-left: 0px !important; }
.CodeMirror-gutters { display: none !important; }
}
#write li > figure:last-child { margin-bottom: 0.5rem; }
#write ol, #write ul { position: relative; }
img { max-width: 100%; vertical-align: middle; image-orientation: from-image; }
button, input, select, textarea { color: inherit; font-family: inherit; font-size: inherit; font-style: inherit; font-variant-caps: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; }
input[type="checkbox"], input[type="radio"] { line-height: normal; padding: 0px; }
*, ::after, ::before { box-sizing: border-box; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p, #write pre { width: inherit; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p { position: relative; }
p { line-height: inherit; }
h1, h2, h3, h4, h5, h6 { break-after: avoid-page; break-inside: avoid; orphans: 4; }
p { orphans: 4; }
h1 { font-size: 2rem; }
h2 { font-size: 1.8rem; }
h3 { font-size: 1.6rem; }
h4 { font-size: 1.4rem; }
h5 { font-size: 1.2rem; }
h6 { font-size: 1rem; }
.md-math-block, .md-rawblock, h1, h2, h3, h4, h5, h6, p { margin-top: 1rem; margin-bottom: 1rem; }
.hidden { display: none; }
.md-blockmeta { color: rgb(204, 204, 204); font-weight: 700; font-style: italic; }
a { cursor: pointer; }
sup.md-footnote { padding: 2px 4px; background-color: rgba(238, 238, 238, 0.7); color: rgb(85, 85, 85); border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; cursor: pointer; }
sup.md-footnote a, sup.md-footnote a:hover { color: inherit; text-transform: inherit; text-decoration: inherit; }
#write input[type="checkbox"] { cursor: pointer; width: inherit; height: inherit; }
figure { overflow-x: auto; margin: 1.2em 0px; max-width: calc(100% + 16px); padding: 0px; }
figure > table { margin: 0px; }
tr { break-inside: avoid; break-after: auto; }
thead { display: table-header-group; }
table { border-collapse: collapse; border-spacing: 0px; width: 100%; overflow: auto; break-inside: auto; text-align: left; }
table.md-table td { min-width: 32px; }
.CodeMirror-gutters { border-right-width: 0px; background-color: inherit; }
.CodeMirror-linenumber { }
.CodeMirror { text-align: left; }
.CodeMirror-placeholder { opacity: 0.3; }
.CodeMirror pre { padding: 0px 4px; }
.CodeMirror-lines { padding: 0px; }
div.hr:focus { cursor: none; }
#write pre { white-space: pre-wrap; }
#write.fences-no-line-wrapping pre { white-space: pre; }
#write pre.ty-contain-cm { white-space: normal; }
.CodeMirror-gutters { margin-right: 4px; }
.md-fences { font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; overflow: visible; white-space: pre; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: inherit; position: relative !important; background-position: inherit inherit; background-repeat: inherit inherit; }
.md-diagram-panel { width: 100%; margin-top: 10px; text-align: center; padding-top: 0px; padding-bottom: 8px; overflow-x: auto; }
#write .md-fences.mock-cm { white-space: pre-wrap; }
.md-fences.md-fences-with-lineno { padding-left: 0px; }
#write.fences-no-line-wrapping .md-fences.mock-cm { white-space: pre; overflow-x: auto; }
.md-fences.mock-cm.md-fences-with-lineno { padding-left: 8px; }
.CodeMirror-line, twitterwidget { break-inside: avoid; }
.footnotes { opacity: 0.8; font-size: 0.9rem; margin-top: 1em; margin-bottom: 1em; }
.footnotes + .footnotes { margin-top: 0px; }
.md-reset { margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: top; text-decoration: none; text-shadow: none; float: none; position: static; width: auto; height: auto; white-space: nowrap; cursor: inherit; line-height: normal; font-weight: 400; text-align: left; box-sizing: content-box; direction: ltr; background-position: 0px 0px; background-repeat: initial initial; }
li div { padding-top: 0px; }
blockquote { margin: 1rem 0px; }
li .mathjax-block, li p { margin: 0.5rem 0px; }
li blockquote { margin: 1rem 0px; }
li { margin: 0px; position: relative; }
blockquote > :last-child { margin-bottom: 0px; }
blockquote > :first-child, li > :first-child { margin-top: 0px; }
.footnotes-area { color: rgb(136, 136, 136); margin-top: 0.714rem; padding-bottom: 0.143rem; white-space: normal; }
#write .footnote-line { white-space: pre-wrap; }
@media print {
body, html { border: 1px solid transparent; height: 99%; break-after: avoid; break-before: avoid; font-variant-ligatures: no-common-ligatures; }
#write { margin-top: 0px; padding-top: 0px; border-color: transparent !important; }
.typora-export * { -webkit-print-color-adjust: exact; }
.typora-export #write { break-after: avoid; }
.typora-export #write::after { height: 0px; }
.is-mac table { break-inside: avoid; }
}
.footnote-line { margin-top: 0.714em; font-size: 0.7em; }
a img, img a { cursor: pointer; }
pre.md-meta-block { font-size: 0.8rem; min-height: 0.8rem; white-space: pre-wrap; background-color: rgb(204, 204, 204); display: block; overflow-x: hidden; background-position: initial initial; background-repeat: initial initial; }
p > .md-image:only-child:not(.md-img-error) img, p > img:only-child { display: block; margin: auto; }
#write.first-line-indent p > .md-image:only-child:not(.md-img-error) img { left: -2em; position: relative; }
p > .md-image:only-child { display: inline-block; width: 100%; }
#write .MathJax_Display { margin: 0.8em 0px 0px; }
.md-math-block { width: 100%; }
.md-math-block:not(:empty)::after { display: none; }
.MathJax_ref { fill: currentcolor; }
[contenteditable="true"]:active, [contenteditable="true"]:focus, [contenteditable="false"]:active, [contenteditable="false"]:focus { outline: 0px; box-shadow: none; }
.md-task-list-item { position: relative; list-style-type: none; }
.task-list-item.md-task-list-item { padding-left: 0px; }
.md-task-list-item > input { position: absolute; top: 0px; left: 0px; margin-left: -1.2em; margin-top: calc(1em - 10px); border: none; }
.math { font-size: 1rem; }
.md-toc { min-height: 3.58rem; position: relative; font-size: 0.9rem; border-top-left-radius: 10px; border-top-right-radius: 10px; border-bottom-right-radius: 10px; border-bottom-left-radius: 10px; }
.md-toc-content { position: relative; margin-left: 0px; }
.md-toc-content::after, .md-toc::after { display: none; }
.md-toc-item { display: block; color: rgb(65, 131, 196); }
.md-toc-item a { text-decoration: none; }
.md-toc-inner:hover { text-decoration: underline; }
.md-toc-inner { display: inline-block; cursor: pointer; }
.md-toc-h1 .md-toc-inner { margin-left: 0px; font-weight: 700; }
.md-toc-h2 .md-toc-inner { margin-left: 2em; }
.md-toc-h3 .md-toc-inner { margin-left: 4em; }
.md-toc-h4 .md-toc-inner { margin-left: 6em; }
.md-toc-h5 .md-toc-inner { margin-left: 8em; }
.md-toc-h6 .md-toc-inner { margin-left: 10em; }
@media screen and (max-width: 48em) {
.md-toc-h3 .md-toc-inner { margin-left: 3.5em; }
.md-toc-h4 .md-toc-inner { margin-left: 5em; }
.md-toc-h5 .md-toc-inner { margin-left: 6.5em; }
.md-toc-h6 .md-toc-inner { margin-left: 8em; }
}
a.md-toc-inner { font-size: inherit; font-style: inherit; font-weight: inherit; line-height: inherit; }
.footnote-line a:not(.reversefootnote) { color: inherit; }
.md-attr { display: none; }
.md-fn-count::after { content: "."; }
code, pre, samp, tt { font-family: var(--monospace); }
kbd { margin: 0px 0.1em; padding: 0.1em 0.6em; font-size: 0.8em; color: rgb(36, 39, 41); background-color: rgb(255, 255, 255); border: 1px solid rgb(173, 179, 185); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; box-shadow: rgba(12, 13, 14, 0.2) 0px 1px 0px, rgb(255, 255, 255) 0px 0px 0px 2px inset; white-space: nowrap; vertical-align: middle; background-position: initial initial; background-repeat: initial initial; }
.md-comment { color: rgb(162, 127, 3); opacity: 0.8; font-family: var(--monospace); }
code { text-align: left; }
a.md-print-anchor { white-space: pre !important; border: none !important; display: inline-block !important; position: absolute !important; width: 1px !important; right: 0px !important; outline: 0px !important; text-shadow: initial !important; background-position: 0px 0px !important; background-repeat: initial initial !important; }
.md-inline-math .MathJax_SVG .noError { display: none !important; }
.html-for-mac .inline-math-svg .MathJax_SVG { vertical-align: 0.2px; }
.md-math-block .MathJax_SVG_Display { text-align: center; margin: 0px; position: relative; text-indent: 0px; max-width: none; max-height: none; min-height: 0px; min-width: 100%; width: auto; overflow-y: hidden; display: block !important; }
.MathJax_SVG_Display, .md-inline-math .MathJax_SVG_Display { width: auto; margin: inherit; display: inline-block !important; }
.MathJax_SVG .MJX-monospace { font-family: var(--monospace); }
.MathJax_SVG .MJX-sans-serif { font-family: sans-serif; }
.MathJax_SVG { display: inline; font-style: normal; font-weight: 400; line-height: normal; zoom: 90%; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; word-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; }
.MathJax_SVG * { transition: none; }
.MathJax_SVG_Display svg { vertical-align: middle !important; margin-bottom: 0px !important; margin-top: 0px !important; }
.os-windows.monocolor-emoji .md-emoji { font-family: "Segoe UI Symbol", sans-serif; }
.md-diagram-panel > svg { max-width: 100%; }
[lang="flow"] svg, [lang="mermaid"] svg { max-width: 100%; height: auto; }
[lang="mermaid"] .node text { font-size: 1rem; }
table tr th { border-bottom-width: 0px; }
video { max-width: 100%; display: block; margin: 0px auto; }
iframe { max-width: 100%; width: 100%; border: none; }
.highlight td, .highlight tr { border: 0px; }
mark { background-color: rgb(255, 255, 0); color: rgb(0, 0, 0); background-position: initial initial; background-repeat: initial initial; }
.md-html-inline .md-plain, .md-html-inline strong, mark .md-inline-math, mark strong { color: inherit; }
mark .md-meta { color: rgb(0, 0, 0); opacity: 0.3 !important; }
@media print {
.typora-export h1, .typora-export h2, .typora-export h3, .typora-export h4, .typora-export h5, .typora-export h6 { break-inside: avoid; }
}
.md-diagram-panel .messageText { stroke: none !important; }
.md-diagram-panel .start-state { fill: var(--node-fill); }
.md-diagram-panel .edgeLabel rect { opacity: 1 !important; }
.md-require-zoom-fix foreignObject { font-size: var(--mermaid-font-zoom); }
.CodeMirror { height: auto; }
.CodeMirror.cm-s-inner { background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: inherit; background-position: inherit inherit; background-repeat: inherit inherit; }
.CodeMirror-scroll { overflow: auto hidden; z-index: 3; }
.CodeMirror-gutter-filler, .CodeMirror-scrollbar-filler { background-color: rgb(255, 255, 255); }
.CodeMirror-gutters { border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: inherit; white-space: nowrap; background-position: inherit inherit; background-repeat: inherit inherit; }
.CodeMirror-linenumber { padding: 0px 3px 0px 5px; text-align: right; color: rgb(153, 153, 153); }
.cm-s-inner .cm-keyword { color: rgb(119, 0, 136); }
.cm-s-inner .cm-atom, .cm-s-inner.cm-atom { color: rgb(34, 17, 153); }
.cm-s-inner .cm-number { color: rgb(17, 102, 68); }
.cm-s-inner .cm-def { color: rgb(0, 0, 255); }
.cm-s-inner .cm-variable { color: rgb(0, 0, 0); }
.cm-s-inner .cm-variable-2 { color: rgb(0, 85, 170); }
.cm-s-inner .cm-variable-3 { color: rgb(0, 136, 85); }
.cm-s-inner .cm-string { color: rgb(170, 17, 17); }
.cm-s-inner .cm-property { color: rgb(0, 0, 0); }
.cm-s-inner .cm-operator { color: rgb(152, 26, 26); }
.cm-s-inner .cm-comment, .cm-s-inner.cm-comment { color: rgb(170, 85, 0); }
.cm-s-inner .cm-string-2 { color: rgb(255, 85, 0); }
.cm-s-inner .cm-meta { color: rgb(85, 85, 85); }
.cm-s-inner .cm-qualifier { color: rgb(85, 85, 85); }
.cm-s-inner .cm-builtin { color: rgb(51, 0, 170); }
.cm-s-inner .cm-bracket { color: rgb(153, 153, 119); }
.cm-s-inner .cm-tag { color: rgb(17, 119, 0); }
.cm-s-inner .cm-attribute { color: rgb(0, 0, 204); }
.cm-s-inner .cm-header, .cm-s-inner.cm-header { color: rgb(0, 0, 255); }
.cm-s-inner .cm-quote, .cm-s-inner.cm-quote { color: rgb(0, 153, 0); }
.cm-s-inner .cm-hr, .cm-s-inner.cm-hr { color: rgb(153, 153, 153); }
.cm-s-inner .cm-link, .cm-s-inner.cm-link { color: rgb(0, 0, 204); }
.cm-negative { color: rgb(221, 68, 68); }
.cm-positive { color: rgb(34, 153, 34); }
.cm-header, .cm-strong { font-weight: 700; }
.cm-del { text-decoration: line-through; }
.cm-em { font-style: italic; }
.cm-link { text-decoration: underline; }
.cm-error { color: red; }
.cm-invalidchar { color: red; }
.cm-constant { color: rgb(38, 139, 210); }
.cm-defined { color: rgb(181, 137, 0); }
div.CodeMirror span.CodeMirror-matchingbracket { color: rgb(0, 255, 0); }
div.CodeMirror span.CodeMirror-nonmatchingbracket { color: rgb(255, 34, 34); }
.cm-s-inner .CodeMirror-activeline-background { background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: inherit; background-position: inherit inherit; background-repeat: inherit inherit; }
.CodeMirror { position: relative; overflow: hidden; }
.CodeMirror-scroll { height: 100%; outline: 0px; position: relative; box-sizing: content-box; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: inherit; background-position: inherit inherit; background-repeat: inherit inherit; }
.CodeMirror-sizer { position: relative; }
.CodeMirror-gutter-filler, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-vscrollbar { position: absolute; z-index: 6; display: none; }
.CodeMirror-vscrollbar { right: 0px; top: 0px; overflow: hidden; }
.CodeMirror-hscrollbar { bottom: 0px; left: 0px; overflow: hidden; }
.CodeMirror-scrollbar-filler { right: 0px; bottom: 0px; }
.CodeMirror-gutter-filler { left: 0px; bottom: 0px; }
.CodeMirror-gutters { position: absolute; left: 0px; top: 0px; padding-bottom: 30px; z-index: 3; }
.CodeMirror-gutter { white-space: normal; height: 100%; box-sizing: content-box; padding-bottom: 30px; margin-bottom: -32px; display: inline-block; }
.CodeMirror-gutter-wrapper { position: absolute; z-index: 4; border: none !important; background-position: 0px 0px !important; background-repeat: initial initial !important; }
.CodeMirror-gutter-background { position: absolute; top: 0px; bottom: 0px; z-index: 4; }
.CodeMirror-gutter-elt { position: absolute; cursor: default; z-index: 4; }
.CodeMirror-lines { cursor: text; }
.CodeMirror pre { border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; border-width: 0px; font-family: inherit; font-size: inherit; margin: 0px; white-space: pre; word-wrap: normal; color: inherit; z-index: 2; position: relative; overflow: visible; background-position: 0px 0px; background-repeat: initial initial; }
.CodeMirror-wrap pre { word-wrap: break-word; white-space: pre-wrap; word-break: normal; }
.CodeMirror-code pre { border-right-width: 30px; border-right-style: solid; border-right-color: transparent; width: fit-content; }
.CodeMirror-wrap .CodeMirror-code pre { border-right-style: none; width: auto; }
.CodeMirror-linebackground { position: absolute; left: 0px; right: 0px; top: 0px; bottom: 0px; z-index: 0; }
.CodeMirror-linewidget { position: relative; z-index: 2; overflow: auto; }
.CodeMirror-wrap .CodeMirror-scroll { overflow-x: hidden; }
.CodeMirror-measure { position: absolute; width: 100%; height: 0px; overflow: hidden; visibility: hidden; }
.CodeMirror-measure pre { position: static; }
.CodeMirror div.CodeMirror-cursor { position: absolute; visibility: hidden; border-right-style: none; width: 0px; }
.CodeMirror div.CodeMirror-cursor { visibility: hidden; }
.CodeMirror-focused div.CodeMirror-cursor { visibility: inherit; }
.cm-searching { background-color: rgba(255, 255, 0, 0.4); background-position: initial initial; background-repeat: initial initial; }
@media print {
.CodeMirror div.CodeMirror-cursor { visibility: hidden; }
}
:root {
--mermaid-theme: night;
--node-fill: #BDD5EA;
}
[lang='mermaid'] .label {
color: #333;
}
/* CSS Document */
/** code highlight */
.cm-s-inner .cm-variable,
.cm-s-inner .cm-operator,
.cm-s-inner .cm-property {
color: #b8bfc6;
}
.cm-s-inner .cm-keyword {
color: #C88FD0;
}
.cm-s-inner .cm-tag {
color: #7DF46A;
}
.cm-s-inner .cm-attribute {
color: #7575E4;
}
.CodeMirror div.CodeMirror-cursor {
border-left: 1px solid #b8bfc6;
z-index: 3;
}
.cm-s-inner .cm-string {
color: #D26B6B;
}
.cm-s-inner .cm-comment,
.cm-s-inner.cm-comment {
color: #DA924A;
}
.cm-s-inner .cm-header,
.cm-s-inner .cm-def,
.cm-s-inner.cm-header,
.cm-s-inner.cm-def {
color: #8d8df0;
}
.cm-s-inner .cm-quote,
.cm-s-inner.cm-quote {
color: #57ac57;
}
.cm-s-inner .cm-hr {
color: #d8d5d5;
}
.cm-s-inner .cm-link {
color: #d3d3ef;
}
.cm-s-inner .cm-negative {
color: #d95050;
}
.cm-s-inner .cm-positive {
color: #50e650;
}
.cm-s-inner .cm-string-2 {
color: #f50;
}
.cm-s-inner .cm-meta,
.cm-s-inner .cm-qualifier {
color: #b7b3b3;
}
.cm-s-inner .cm-builtin {
color: #f3b3f8;
}
.cm-s-inner .cm-bracket {
color: #997;
}
.cm-s-inner .cm-atom,
.cm-s-inner.cm-atom {
color: #84B6CB;
}
.cm-s-inner .cm-number {
color: #64AB8F;
}
.cm-s-inner .cm-variable {
color: #b8bfc6;
}
.cm-s-inner .cm-variable-2 {
color: #9FBAD5;
}
.cm-s-inner .cm-variable-3 {
color: #1cc685;
}
.CodeMirror-selectedtext,
.CodeMirror-selected {
background: #4a89dc;
color: #fff !important;
text-shadow: none;
}
.CodeMirror-gutters {
border-right: none;
}
/* CSS Document */
/** markdown source **/
.cm-s-typora-default .cm-header,
.cm-s-typora-default .cm-property
{
color: #cebcca;
}
.CodeMirror.cm-s-typora-default div.CodeMirror-cursor{
border-left: 3px solid #b8bfc6;
}
.cm-s-typora-default .cm-comment {
color: #9FB1FF;
}
.cm-s-typora-default .cm-string {
color: #A7A7D9
}
.cm-s-typora-default .cm-atom, .cm-s-typora-default .cm-number {
color: #848695;
font-style: italic;
}
.cm-s-typora-default .cm-link {
color: #95B94B;
}
.cm-s-typora-default .CodeMirror-activeline-background {
background: rgba(51, 51, 51, 0.72);
}
.cm-s-typora-default .cm-comment, .cm-s-typora-default .cm-code {
color: #8aa1e1;
}@import "";
@import "";
@import "";
:root {
--bg-color: #363B40;
--side-bar-bg-color: #2E3033;
--text-color: #b8bfc6;
--select-text-bg-color:#4a89dc;
--item-hover-bg-color: #0a0d16;
--control-text-color: #b7b7b7;
--control-text-hover-color: #eee;
--window-border: 1px solid #555;
--active-file-bg-color: rgb(34, 34, 34);
--active-file-border-color: #8d8df0;
--primary-color: #a3d5fe;
--active-file-text-color: white;
--item-hover-bg-color: #70717d;
--item-hover-text-color: white;
--primary-color: #6dc1e7;
--rawblock-edit-panel-bd: #333;
--search-select-bg-color: #428bca;
}
html {
font-size: 16px;
}
html,
body {
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
background: #363B40;
background: var(--bg-color);
fill: currentColor;
line-height: 1.625rem;
}
#write {
max-width: 914px;
}
@media only screen and (min-width: 1400px) {
#write {
max-width: 1024px;
}
}
@media only screen and (min-width: 1800px) {
#write {
max-width: 1200px;
}
}
html,
body,
button,
input,
select,
textarea,
div.code-tooltip-content {
color: #b8bfc6;
border-color: transparent;
}
div.code-tooltip,
.md-hover-tip .md-arrow:after {
background: #333;
}
.popover.bottom > .arrow:after {
border-bottom-color: #333;
}
html,
body,
button,
input,
select,
textarea {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
hr {
height: 2px;
border: 0;
margin: 24px 0 !important;
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: "Lucida Grande", "Corbel", sans-serif;
font-weight: normal;
clear: both;
-ms-word-wrap: break-word;
word-wrap: break-word;
margin: 0;
padding: 0;
color: #DEDEDE
}
h1 {
font-size: 2.5rem;
/* 36px */
line-height: 2.75rem;
/* 40px */
margin-bottom: 1.5rem;
/* 24px */
letter-spacing: -1.5px;
}
h2 {
font-size: 1.63rem;
/* 24px */
line-height: 1.875rem;
/* 30px */
margin-bottom: 1.5rem;
/* 24px */
letter-spacing: -1px;
font-weight: bold;
}
h3 {
font-size: 1.17rem;
/* 18px */
line-height: 1.5rem;
/* 24px */
margin-bottom: 1.5rem;
/* 24px */
letter-spacing: -1px;
font-weight: bold;
}
h4 {
font-size: 1.12rem;
/* 16px */
line-height: 1.375rem;
/* 22px */
margin-bottom: 1.5rem;
/* 24px */
color: white;
}
h5 {
font-size: 0.97rem;
/* 16px */
line-height: 1.25rem;
/* 22px */
margin-bottom: 1.5rem;
/* 24px */
font-weight: bold;
}
h6 {
font-size: 0.93rem;
/* 16px */
line-height: 1rem;
/* 16px */
margin-bottom: 0.75rem;
color: white;
}
@media (min-width: 980px) {
h3.md-focus:before,
h4.md-focus:before,
h5.md-focus:before,
h6.md-focus:before {
color: #ddd;
border: 1px solid #ddd;
border-radius: 3px;
position: absolute;
left: -1.642857143rem;
top: .357142857rem;
float: left;
font-size: 9px;
padding-left: 2px;
padding-right: 2px;
vertical-align: bottom;
font-weight: normal;
line-height: normal;
}
h3.md-focus:before {
content: 'h3';
}
h4.md-focus:before {
content: 'h4';
}
h5.md-focus:before {
content: 'h5';
top: 0px;
}
h6.md-focus:before {
content: 'h6';
top: 0px;
}
}
a {
text-decoration: none;
outline: 0;
}
a:hover {
outline: 0;
}
a:focus {
outline: thin dotted;
}
sup.md-footnote {
background-color: #555;
color: #ddd;
}
p {
-ms-word-wrap: break-word;
word-wrap: break-word;
}
p,
ul,
dd,
ol,
hr,
address,
pre,
table,
iframe,
.wp-caption,
.wp-audio-shortcode,
.wp-video-shortcode {
margin-top: 0;
margin-bottom: 1.5rem;
/* 24px */
}
audio:not([controls]) {
display: none;
}
[hidden] {
display: none;
}
::-moz-selection {
background: #4a89dc;
color: #fff;
text-shadow: none;
}
*.in-text-selection,
::selection {
background: #4a89dc;
color: #fff;
text-shadow: none;
}
ul,
ol {
padding: 0 0 0 1.875rem;
/* 30px */
}
ul {
list-style: square;
}
ol {
list-style: decimal;
}
ul ul,
ol ol,
ul ol,
ol ul {
margin: 0;
}
b,
th,
dt,
strong {
font-weight: bold;
}
i,
em,
dfn,
cite {
font-style: italic;
}
blockquote {
padding-left: 1.875rem;
margin: 0 0 1.875rem 1.875rem;
border-left: solid 2px #474d54;
padding-left: 30px;
margin-top: 35px;
}
pre,
code,
kbd,
tt,
var {
font-size: 0.875rem;
font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace;
}
code,
tt,
var {
background: rgba(0, 0, 0, 0.05);
}
kbd {
padding: 2px 4px;
font-size: 90%;
color: #fff;
background-color: #333;
border-radius: 3px;
box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);
}
pre.md-fences {
padding: 10px 10px 10px 30px;
margin-bottom: 20px;
background: #333;
}
.CodeMirror-gutters {
background: #333;
border-right: 1px solid transparent;
}
.enable-diagrams pre.md-fences[lang="sequence"] .code-tooltip,
.enable-diagrams pre.md-fences[lang="flow"] .code-tooltip,
.enable-diagrams pre.md-fences[lang="mermaid"] .code-tooltip {
bottom: -2.2em;
right: 4px;
}
code,
kbd,
tt,
var {
padding: 2px 5px;
}
table {
max-width: 100%;
width: 100%;
border-collapse: collapse;
border-spacing: 0;
}
th,
td {
padding: 5px 10px;
vertical-align: top;
}
a {
-webkit-transition: all .2s ease-in-out;
transition: all .2s ease-in-out;
}
hr {
background: #474d54;
/* variable */
}
h1 {
margin-top: 2em;
}
a {
color: #e0e0e0;
text-decoration: underline;
}
a:hover {
color: #fff;
}
.md-inline-math script {
color: #81b1db;
}
b,
th,
dt,
strong {
color: #DEDEDE;
/* variable */
}
mark {
background: #D3D40E;
}
blockquote {
color: #9DA2A6;
}
table a {
color: #DEDEDE;
/* variable */
}
th,
td {
border: solid 1px #474d54;
/* variable */
}
.task-list {
padding-left: 0;
}
.md-task-list-item {
padding-left: 1.25rem;
}
.md-task-list-item > input {
top: auto;
}
.md-task-list-item > input:before {
content: "";
display: inline-block;
width: 0.875rem;
height: 0.875rem;
vertical-align: middle;
text-align: center;
border: 1px solid #b8bfc6;
background-color: #363B40;
margin-top: -0.4rem;
}
.md-task-list-item > input:checked:before,
.md-task-list-item > input[checked]:before {
content: '\221A';
/*◘*/
font-size: 0.625rem;
line-height: 0.625rem;
color: #DEDEDE;
}
/** quick open **/
.auto-suggest-container {
border: 0px;
background-color: #525C65;
}
#typora-quick-open {
background-color: #525C65;
}
#typora-quick-open input{
background-color: #525C65;
border: 0;
border-bottom: 1px solid grey;
}
.typora-quick-open-item {
background-color: inherit;
color: inherit;
}
.typora-quick-open-item.active,
.typora-quick-open-item:hover {
background-color: #4D8BDB;
color: white;
}
.typora-quick-open-item:hover {
background-color: rgba(77, 139, 219, 0.8);
}
.typora-search-spinner > div {
background-color: #fff;
}
#write pre.md-meta-block {
border-bottom: 1px dashed #ccc;
background: transparent;
padding-bottom: 0.6em;
line-height: 1.6em;
}
.btn,
.btn .btn-default {
background: transparent;
color: #b8bfc6;
}
.ty-table-edit {
border-top: 1px solid gray;
background-color: #363B40;
}
.popover-title {
background: transparent;
}
.md-image>.md-meta {
color: #BBBBBB;
background: transparent;
}
.md-expand.md-image>.md-meta {
color: #DDD;
}
#write>h3:before,
#write>h4:before,
#write>h5:before,
#write>h6:before {
border: none;
border-radius: 0px;
color: #888;
text-decoration: underline;
left: -1.4rem;
top: 0.2rem;
}
#write>h3.md-focus:before {
top: 2px;
}
#write>h4.md-focus:before {
top: 2px;
}
.md-toc-item {
color: #A8C2DC;
}
#write div.md-toc-tooltip {
background-color: #363B40;
}
.dropdown-menu .btn:hover,
.dropdown-menu .btn:focus,
.md-toc .btn:hover,
.md-toc .btn:focus {
color: white;
background: black;
}
#toc-dropmenu {
background: rgba(50, 54, 59, 0.93);
border: 1px solid rgba(253, 253, 253, 0.15);
}
#toc-dropmenu .divider {
background-color: #9b9b9b;
}
.outline-expander:before {
top: 2px;
}
#typora-sidebar {
box-shadow: none;
border-right: 1px dashed;
border-right: none;
}
.sidebar-tabs {
border-bottom:0;
}
#typora-sidebar:hover .outline-title-wrapper {
border-left: 1px dashed;
}
.outline-title-wrapper .btn {
color: inherit;
}
.outline-item:hover {
border-color: #363B40;
background-color: #363B40;
color: white;
}
h1.md-focus .md-attr,
h2.md-focus .md-attr,
h3.md-focus .md-attr,
h4.md-focus .md-attr,
h5.md-focus .md-attr,
h6.md-focus .md-attr,
.md-header-span .md-attr {
color: #8C8E92;
display: inline;
}
.md-comment {
color: #5a95e3;
opacity: 1;
}
.md-inline-math svg {
color: #b8bfc6;
}
#math-inline-preview .md-arrow:after {
background: black;
}
.modal-content {
background: var(--bg-color);
border: 0;
}
.modal-title {
font-size: 1.5em;
}
.modal-content input {
background-color: rgba(26, 21, 21, 0.51);
color: white;
}
.modal-content .input-group-addon {
color: white;
}
.modal-backdrop {
background-color: rgba(174, 174, 174, 0.7);
}
.modal-content .btn-primary {
border-color: var(--primary-color);
}
.md-table-resize-popover {
background-color: #333;
}
.form-inline .input-group .input-group-addon {
color: white;
}
#md-searchpanel {
border-bottom: 1px dashed grey;
}
/** UI for electron */
.context-menu,
#spell-check-panel,
#footer-word-count-info {
background-color: #42464A;
}
.context-menu.dropdown-menu .divider,
.dropdown-menu .divider {
background-color: #777777;
}
footer {
color: inherit;
}
@media (max-width: 1000px) {
footer {
border-top: none;
}
footer:hover {
color: inherit;
}
}
#file-info-file-path .file-info-field-value:hover {
background-color: #555;
color: #dedede;
}
.megamenu-content,
.megamenu-opened header {
background: var(--bg-color);
}
.megamenu-menu-panel h2,
.megamenu-menu-panel h1,
.long-btn {
color: inherit;
}
.megamenu-menu-panel input[type='text'] {
background: inherit;
border: 0;
border-bottom: 1px solid;
}
#recent-file-panel-action-btn {
background: inherit;
border: 1px grey solid;
}
.megamenu-menu-panel .dropdown-menu > li > a {
color: inherit;
background-color: #2F353A;
text-decoration: none;
}
.megamenu-menu-panel table td:nth-child(1) {
color: inherit;
font-weight: bold;
}
.megamenu-menu-panel tbody tr:hover td:nth-child(1) {
color: white;
}
.modal-footer .btn-default,
.modal-footer .btn-primary,
.modal-footer .btn-default:not(:hover) {
border: 1px solid;
border-color: transparent;
}
.btn-primary {
color: white;
}
.btn-default:hover, .btn-default:focus, .btn-default.focus, .btn-default:active, .btn-default.active, .open > .dropdown-toggle.btn-default {
color: white;
border: 1px solid #ddd;
background-color: inherit;
}
.modal-header {
border-bottom: 0;
}
.modal-footer {
border-top: 0;
}
#recent-file-panel tbody tr:nth-child(2n-1) {
background-color: transparent !important;
}
.megamenu-menu-panel tbody tr:hover td:nth-child(2) {
color: inherit;
}
.megamenu-menu-panel .btn {
border: 1px solid #eee;
background: transparent;
}
.mouse-hover .toolbar-icon.btn:hover,
#w-full.mouse-hover,
#w-pin.mouse-hover {
background-color: inherit;
}
.typora-node::-webkit-scrollbar {
width: 5px;
}
.typora-node::-webkit-scrollbar-thumb:vertical {
background: rgba(250, 250, 250, 0.3);
}
.typora-node::-webkit-scrollbar-thumb:vertical:active {
background: rgba(250, 250, 250, 0.5);
}
#w-unpin {
background-color: #4182c4;
}
#top-titlebar, #top-titlebar * {
color: var(--item-hover-text-color);
}
.typora-sourceview-on #toggle-sourceview-btn,
#footer-word-count:hover,
.ty-show-word-count #footer-word-count {
background: #333333;
}
#toggle-sourceview-btn:hover {
color: #eee;
background: #333333;
}
/** focus mode */
.on-focus-mode .md-end-block:not(.md-focus):not(.md-focus-container) * {
color: #686868 !important;
}
.on-focus-mode .md-end-block:not(.md-focus) img,
.on-focus-mode .md-task-list-item:not(.md-focus-container)>input {
opacity: #686868 !important;
}
.on-focus-mode li[cid]:not(.md-focus-container){
color: #686868;
}
.on-focus-mode .md-fences.md-focus .CodeMirror-code>*:not(.CodeMirror-activeline) *,
.on-focus-mode .CodeMirror.cm-s-inner:not(.CodeMirror-focused) * {
color: #686868 !important;
}
.on-focus-mode .md-focus,
.on-focus-mode .md-focus-container {
color: #fff;
}
.on-focus-mode #typora-source .CodeMirror-code>*:not(.CodeMirror-activeline) * {
color: #686868 !important;
}
/*diagrams*/
#write .md-focus .md-diagram-panel {
border: 1px solid #ddd;
margin-left: -1px;
width: calc(100% + 2px);
}
/*diagrams*/
#write .md-focus.md-fences-with-lineno .md-diagram-panel {
margin-left: auto;
}
.md-diagram-panel-error {
color: #f1908e;
}
.active-tab-files #info-panel-tab-file,
.active-tab-files #info-panel-tab-file:hover,
.active-tab-outline #info-panel-tab-outline,
.active-tab-outline #info-panel-tab-outline:hover {
color: #eee;
}
.sidebar-footer-item:hover,
.footer-item:hover {
background: inherit;
color: white;
}
.ty-side-sort-btn.active,
.ty-side-sort-btn:hover,
.selected-folder-menu-item a:after {
color: white;
}
#sidebar-files-menu {
border:solid 1px;
box-shadow: 4px 4px 20px rgba(0, 0, 0, 0.79);
background-color: var(--bg-color);
}
.file-list-item {
border-bottom:none;
}
.file-list-item-summary {
opacity: 1;
}
.file-list-item.active:first-child {
border-top: none;
}
.file-node-background {
height: 32px;
}
.file-library-node.active>.file-node-content,
.file-list-item.active {
color: white;
color: var(--active-file-text-color);
}
.file-library-node.active>.file-node-background{
background-color: rgb(34, 34, 34);
background-color: var(--active-file-bg-color);
}
.file-list-item.active {
background-color: rgb(34, 34, 34);
background-color: var(--active-file-bg-color);
}
#ty-tooltip {
background-color: black;
color: #eee;
}
.md-task-list-item>input {
margin-left: -1.3em;
margin-top: 0.3rem;
-webkit-appearance: none;
}
.md-mathjax-midline {
background-color: #57616b;
border-bottom: none;
}
footer.ty-footer {
border-color: #656565;
}
.ty-preferences .btn-default {
background: transparent;
}
.ty-preferences .btn-default:hover {
background: #57616b;
}
.ty-preferences select {
border: 1px solid #989698;
height: 21px;
}
.ty-preferences .nav-group-item.active {
background: var(--item-hover-bg-color);
}
.ty-preferences input[type="search"] {
border-color: #333;
background: #333;
line-height: 22px;
border-radius: 6px;
color: white;
}
.ty-preferences input[type="search"]:focus {
box-shadow: none;
}
[data-is-directory="true"] .file-node-content {
margin-bottom: 0;
}
.file-node-title {
line-height: 22px;
}
.html-for-mac .file-node-open-state, .html-for-mac .file-node-icon {
line-height: 26px;
}
::-webkit-scrollbar-thumb {
background: rgba(230, 230, 230, 0.30);
}
::-webkit-scrollbar-thumb:active {
background: rgba(230, 230, 230, 0.50);
}
#typora-sidebar:hover div.sidebar-content-content::-webkit-scrollbar-thumb:horizontal {
background: rgba(230, 230, 230, 0.30);
}
.nav-group-item:active {
background-color: #474d54;
}
.md-search-hit {
background: rgba(199, 140, 60, 0.81);
color: #eee;
}
.md-search-hit * {
color: #eee;
}
#md-searchpanel input {
color: white;
}
.export-detail,
.export-item.active,
.export-items-list-control {
background: #d6d6d4
}
.modal-backdrop.in {
opacity: 1;
backdrop-filter: blur(1px);
}
:root {--mermaid-font-zoom:1em ;}
</style>
</head>
<body class='typora-export'>
<div id='write' class=''><h1><a name="ćwiczenia-1403" class="md-header-anchor"></a><span>Ćwiczenia 14.03</span></h1><h2><a name="hello-world-w-unity" class="md-header-anchor"></a><span>Hello World w Unity</span></h2><p><span>(Pliki </span><a href='https://git.wmi.amu.edu.pl/andkok/Unity_artifitial_world/src/branch/cw1/materiałyHelloWorld'><span>https://git.wmi.amu.edu.pl/andkok/Unity_artifitial_world/src/branch/cw1/materiałyHelloWorld</span></a><span> )</span></p><ol start='' ><li><h3><a name="utwórz-nowy-projekt" class="md-header-anchor"></a><span>Utwórz nowy projekt</span></h3><ul><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Otwórz Unity Hub</span></p></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Wybierz NEW</span></p></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>3D, wpisz nazwę i wybierz lokalizacje na twoim komputerze. Zatwierdź klikając CREATE</span></p></li></ul></li><li><h3><a name="import-materiałów-tworzenie-terenu-i-prostych-krztałtów" class="md-header-anchor"></a><span>Import materiałów, tworzenie terenu i prostych krztałtów</span></h3><p><img src="Unityscreen.png" style="zoom:50%;" /></p><p><span>Po środku ekranu jest podgląd sceny (karta Scene). Żeby się w nim przemieszczać klikamy Q i wtedy możemy przesuwać obraz myszką (kliknięcie na prawy przycisk myszy do obracania widoku). Klawisz W zmienia w tryb przesuwania obiektów, a klawisz E jest do obracania obiektów i R zmiany rozmiarów.</span></p><p><span>W dolnej części ekranu, w karcie Project przechowujemy wszystkie modele, tekstury, skrypty i inne potrzebne elementy</span></p><ul><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>W folderze Assets kliknij prawym przyciskiem myszy i z menu wybierz Create -&gt; Folder. Nazwij folder tekstury</span></p></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Otwórz ten folder i przeciągnij do niego wcześniej pobrane tekstury</span></p><p><span>Po lewej stronie jest karta Hierarchy. W niej znajdują się wszystkie obiekty, które są w tworzonej scenie. Tam się dodaje nowe elementy sceny i ustawia zależności pomiędzy elementami</span></p><h4><a name="teren" class="md-header-anchor"></a><span>Teren</span></h4></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Kliknij prawym przyciskiem myszy w polu Hierarchy i wybierz 3D Object -&gt; Terrain</span></p><p><span>Po prawej stronie mamy karte inspector w której są ustawienia zaznaczonego obiektu </span></p><p><img src="ph00009.png" style="zoom:33%;" /></p></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Dodaj teksturę terenu</span></p><ul><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>W Inspektorze przy zakładce Terrain wybierz drugą opcje (ikonka pędzelka)</span></p></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Wybierz z menu Paint Texture</span></p></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Kliknij Edit Terrain Layers -&gt; Create Layer</span></p></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Dodaj trzy tekstury</span></p></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Urozmaić teren zaznaczając tekstury i malując przy pomocy wybranych poniżej pędzli </span></p></li></ul></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Zmień wysokości terenu</span></p><ul><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>W Inspektorze przy zakładce Terrain wybierz drugą opcje (ikonka pędzelka)</span></p></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Wybierz z menu Raise or Lower Terrain</span></p></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Podnosi się teren &quot;malując&quot; po obiekcie terenu, żeby teren obniżyć należy trzymać wciśnięty shift</span></p></li></ul><h4><a name="proste-kształty" class="md-header-anchor"></a><span>Proste kształty</span></h4></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>W karcie Hierarchy kliknij prawym przyciskiem myszy i wybierz 3D Object -&gt; Sphere </span></p></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>żeby nadać kuli koloru utwórz materiał</span></p><ul><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><img src="ph00008.png" style="zoom:33%;" /></p></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Dodaj teksture SphereNormals do tekstur i Inspektorze wybierz texture type: Normal Map, zaznacz create from grayscale, wrap mode: mirror</span></p></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>W folderze Assets utwórz folder Materiały i kliknij prawym przyciskiem myszy i wybierz Create -&gt; Material</span></p></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><img src="ph00007.png" style="zoom:33%;" /></p></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Wybierz kolor Albedo i dodaj teksture do &quot;Normal Map&quot;</span></p></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Przeciągnij materiał na kulę</span></p></li></ul></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>żeby na kulę działała grawitacja i kolizja dodajemy do niej Rigid Body (Add Component -&gt; Rigidbody), i w Constrains - Freeze rotation zaznacz wszystkie (żeby nam się kula nie stoczyła)</span></p></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><img src="ph00006.png" style="zoom:33%;" /><span> </span><img src="ph00005.png" style="zoom:33%;" /></p></li></ul></li><li><h3><a name="dodawanie-skryptu-c" class="md-header-anchor"></a><span>Dodawanie skryptu C#</span></h3><p><span>W Unity za większość akcji i różnych interakcji odpowiadają skrypty C#</span></p><ul><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Utwórz folder skrypty i w nim Create -&gt; C# Script, nazwij go Player.</span></p></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Otwórz ten skrypt i Przed funkcją Start dodaj zmienne:</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="c#"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="c#"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 4px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp;<span class="cm-keyword">public</span> <span class="cm-variable-3">float</span> <span class="cm-variable">speed</span> &nbsp; &nbsp; <span class="cm-operator">=</span> <span class="cm-number">0.1f</span>;</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp;<span class="cm-keyword">public</span> <span class="cm-variable-3">float</span> <span class="cm-variable">rotationSpeed</span> <span class="cm-operator">=</span> <span class="cm-number">0.1f</span>;</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom-width: 0px; border-bottom-style: solid; border-bottom-color: transparent; top: 52px;"></div><div class="CodeMirror-gutters" style="display: none; height: 52px;"></div></div></div></pre></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>wewnątrz funkcji Update wklej:</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="c#"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="c#"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 4px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable-3">float</span> <span class="cm-variable">move</span> &nbsp;<span class="cm-operator">=</span> <span class="cm-variable">Input</span>.<span class="cm-variable">GetAxis</span>(<span class="cm-string">"Vertical"</span>) <span class="cm-operator">*</span> <span class="cm-variable">speed</span>;<span class="cm-tab" role="presentation" cm-text=" "> </span><span class="cm-tab" role="presentation" cm-text=" "> </span><span class="cm-tab" role="presentation" cm-text=" "> </span><span class="cm-tab" role="presentation" cm-text=" "> </span><span class="cm-tab" role="presentation" cm-text=" "> </span><span class="cm-tab" role="presentation" cm-text=" "> </span><span class="cm-comment">// Pobierz dane od użytkownika (klawisze strzałek lub joystick) i przeskaluj wcześniej podaną wartością (przód tył)</span></span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable-3">float</span> <span class="cm-variable">rotate</span> <span class="cm-operator">=</span> <span class="cm-variable">Input</span>.<span class="cm-variable">GetAxis</span>(<span class="cm-string">"Horizontal"</span>) <span class="cm-operator">*</span> <span class="cm-variable">rotationSpeed</span>; <span class="cm-comment">// Pobierz dane od użytkownika (klawisze strzałek lub joystick) i przeskaluj wcześniej podaną wartością (obrót)</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable">Vector3</span> <span class="cm-variable">moveVector</span> <span class="cm-operator">=</span> <span class="cm-keyword">new</span> <span class="cm-variable">Vector3</span>(<span class="cm-variable">PODAJ_X</span>,<span class="cm-variable">PODAJ_Y</span>,<span class="cm-variable">PODAJ_Z</span>); &nbsp;<span class="cm-comment">// Wektor przesuwający objekt &nbsp; &nbsp; DO EDYCJI</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable">gameObject</span>.<span class="cm-variable">GetComponent</span><span class="cm-operator">&lt;</span><span class="cm-variable">Transform</span><span class="cm-operator">&gt;</span>().<span class="cm-variable">Translate</span>(<span class="cm-variable">moveVector</span>, <span class="cm-variable">Space</span>.<span class="cm-variable">Self</span>); &nbsp;<span class="cm-comment">// Funkcja przesuwająca objekt</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable">gameObject</span>.<span class="cm-variable">GetComponent</span><span class="cm-operator">&lt;</span><span class="cm-variable">Transform</span><span class="cm-operator">&gt;</span>().<span class="cm-variable">Rotate</span>(<span class="cm-variable">PODAJ_X</span>,<span class="cm-variable">PODAJ_Y</span>,<span class="cm-variable">PODAJ_Z</span>, <span class="cm-variable">Space</span>.<span class="cm-variable">Self</span>); <span class="cm-comment">// Funkcja obracająca objekt DO EDYCJI</span></span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom-width: 0px; border-bottom-style: solid; border-bottom-color: transparent; top: 312px;"></div><div class="CodeMirror-gutters" style="display: none; height: 312px;"></div></div></div></pre></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Zamień wartości wektora ruchu i funkcji obrotu</span></p></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Przeciągnij skrypt na object Player lub w Inspektorze obiektu Player wybierz Add Component i dodaj Player</span></p></li></ul></li><li><h3><a name="ustawianie-oświetlenia-globalne" class="md-header-anchor"></a><span>Ustawianie oświetlenia (globalne)</span></h3><ul><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Ustawienia oświetlenia są w Window -&gt; Rendering -&gt; Ligthning, można je sobie przypiąć w dowolnym miejscu (ja przesuwam je koło inspektora)</span></p></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><img src="ph00004.png" style="zoom:33%;" /></p></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Dodajemy nowe ustawienia (New Ligthning Settings)</span></p></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Można zmienić Ligthmapper na Progressive GPU</span></p></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Po dostosowaniu ustawień klikamy Generate Lightning (to może chwilę potrwać, nawet do kilku minut)</span></p></li></ul></li><li><h3><a name="tworzenie-wielu-elementów-skryptem-z-ustawianiem-ich-za-pomocą-macierzy-clock" class="md-header-anchor"></a><span>Tworzenie wielu elementów skryptem z ustawianiem ich za pomocą macierzy (Clock)</span></h3><p><img src="ph00001.png" style="zoom:25%;" /></p><ul><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Utwórz objekt tarczy zegara (tekstura </span><img src="clock.png" style="width:25px;" /><span> , zamień przy tworzeniu materiału Rendering mode na Transparent)</span></p></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Utwórz obiekt, który posłuży jako szablon wskazówek zegara</span></p></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Dodaj kod ustawiający zegar do obiektu tarczy zegara</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="c#" style="break-inside: unset;"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="c#"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 4px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><span><span></span>x</span></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-keyword">using</span> <span class="cm-variable">System</span>.<span class="cm-variable">Collections</span>;</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-keyword">using</span> <span class="cm-variable">System</span>.<span class="cm-variable">Collections</span>.<span class="cm-variable">Generic</span>;</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-keyword">using</span> <span class="cm-variable">System</span>;</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-keyword">using</span> <span class="cm-variable">UnityEngine</span>;</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-keyword">public</span> <span class="cm-keyword">class</span> <span class="cm-def">Clock</span> : <span class="cm-variable">MonoBehaviour</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">{</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp;<span class="cm-keyword">public</span> <span class="cm-variable">GameObject</span> <span class="cm-variable">clockHand</span>; <span class="cm-comment">// szablon wyglądu wskazówki zegara</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp;<span class="cm-keyword">void</span> <span class="cm-variable">Start</span>()</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> {</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> }</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp;<span class="cm-keyword">void</span> <span class="cm-variable">Update</span>()</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> {</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text=""></span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-3">DateTime</span> <span class="cm-variable">centuryBegin</span> <span class="cm-operator">=</span> <span class="cm-keyword">new</span> <span class="cm-variable-3">DateTime</span>(<span class="cm-number">2001</span>, <span class="cm-number">1</span>, <span class="cm-number">1</span>);</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-3">DateTime</span> <span class="cm-variable">currentDate</span> <span class="cm-operator">=</span> <span class="cm-variable-3">DateTime</span>.<span class="cm-variable">Now</span>;</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-3">long</span> <span class="cm-variable">elapsedTicks</span> <span class="cm-operator">=</span> <span class="cm-variable">currentDate</span>.<span class="cm-variable">Ticks</span> <span class="cm-operator">-</span> <span class="cm-variable">centuryBegin</span>.<span class="cm-variable">Ticks</span>;</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-3">TimeSpan</span> <span class="cm-variable">elapsedSpan</span> <span class="cm-operator">=</span> <span class="cm-keyword">new</span> <span class="cm-variable-3">TimeSpan</span>(<span class="cm-variable">elapsedTicks</span>);</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-3">float</span> <span class="cm-variable">stopWatchTime</span> <span class="cm-operator">=</span> <span class="cm-variable">Time</span>.<span class="cm-variable">unscaledTime</span>; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="cm-comment">// Czas w sekundach od startu aplikacji (mały zegar)</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-3">float</span> <span class="cm-variable">nowTime</span> <span class="cm-operator">=</span> (<span class="cm-variable-3">float</span>)(((<span class="cm-variable-3">int</span>)(<span class="cm-variable">elapsedSpan</span>.<span class="cm-variable">TotalSeconds</span>)) <span class="cm-operator">%</span> <span class="cm-number">86400</span>); &nbsp; &nbsp;<span class="cm-comment">// Czas w sekundach od początku doby (0:00) (duży zegar)</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-comment">// Stop Watch Time:</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text=""></span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable-3">float</span> <span class="cm-variable">swHour</span> &nbsp;<span class="cm-operator">=</span> <span class="cm-number">0.0f</span>;</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable-3">float</span> <span class="cm-variable">swMinute</span> <span class="cm-operator">=</span> <span class="cm-number">0.0f</span>;</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable-3">float</span> <span class="cm-variable">swSecond</span> <span class="cm-operator">=</span> <span class="cm-number">0.0f</span>;</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-comment">// Global Time:</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable-3">float</span> <span class="cm-variable">hour</span> &nbsp; <span class="cm-operator">=</span> <span class="cm-number">0.0f</span>;</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable-3">float</span> <span class="cm-variable">minute</span> &nbsp;<span class="cm-operator">=</span> <span class="cm-number">0.0f</span>;</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable-3">float</span> <span class="cm-variable">second</span> &nbsp;<span class="cm-operator">=</span> <span class="cm-number">0.0f</span>;</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-comment">// Ustaw pozycje, rozmiar i obrót wskazówek zegara z wykorzystaniem przekształceń macierzowych:</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-comment">// &nbsp; (Matrix4x4.Translate, Matrix4x4.Scale, Matrix4x4.Rotate) dwa pierwsze przyjmują Vector3, a obroty przyjmują Quaternion.Euler( X, Y, Z) (już bez new, bo to funkcja)</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text=""></span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-keyword">var</span> <span class="cm-def">transformationHsw</span> <span class="cm-operator">=</span> <span class="cm-variable">Matrix4x4</span>.<span class="cm-variable">Translate</span>(<span class="cm-keyword">new</span> <span class="cm-variable">Vector3</span>(<span class="cm-number">0</span>, <span class="cm-number">0</span>, <span class="cm-number">0</span>));</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-keyword">var</span> <span class="cm-def">transformationMsw</span> <span class="cm-operator">=</span> <span class="cm-variable">Matrix4x4</span>.<span class="cm-variable">Translate</span>(<span class="cm-keyword">new</span> <span class="cm-variable">Vector3</span>(<span class="cm-number">0</span>, <span class="cm-number">0</span>, <span class="cm-number">0</span>));</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-keyword">var</span> <span class="cm-def">transformationSsw</span> <span class="cm-operator">=</span> <span class="cm-variable">Matrix4x4</span>.<span class="cm-variable">Translate</span>(<span class="cm-keyword">new</span> <span class="cm-variable">Vector3</span>(<span class="cm-number">0</span>, <span class="cm-number">0</span>, <span class="cm-number">0</span>));</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text=""></span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-keyword">var</span> <span class="cm-def">transformationH</span> <span class="cm-operator">=</span> <span class="cm-variable">Matrix4x4</span>.<span class="cm-variable">Translate</span>(<span class="cm-keyword">new</span> <span class="cm-variable">Vector3</span>(<span class="cm-number">0</span>, <span class="cm-number">0</span>, <span class="cm-number">0</span>));</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-keyword">var</span> <span class="cm-def">transformationM</span> <span class="cm-operator">=</span> <span class="cm-variable">Matrix4x4</span>.<span class="cm-variable">Translate</span>(<span class="cm-keyword">new</span> <span class="cm-variable">Vector3</span>(<span class="cm-number">0</span>, <span class="cm-number">0</span>, <span class="cm-number">0</span>));</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-keyword">var</span> <span class="cm-def">transformationS</span> <span class="cm-operator">=</span> <span class="cm-variable">Matrix4x4</span>.<span class="cm-variable">Translate</span>(<span class="cm-keyword">new</span> <span class="cm-variable">Vector3</span>(<span class="cm-number">0</span>, <span class="cm-number">0</span>, <span class="cm-number">0</span>));</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text=""></span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-comment">// Create game objects instances</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text=""></span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable">Graphics</span>.<span class="cm-variable">DrawMeshInstanced</span>(<span class="cm-variable">clockHand</span>.<span class="cm-variable">GetComponent</span><span class="cm-operator">&lt;</span><span class="cm-variable">MeshFilter</span><span class="cm-operator">&gt;</span>().<span class="cm-variable">mesh</span>, <span class="cm-number">0</span>, <span class="cm-variable">clockHand</span>.<span class="cm-variable">GetComponent</span><span class="cm-operator">&lt;</span><span class="cm-variable">MeshRenderer</span><span class="cm-operator">&gt;</span>().<span class="cm-variable">material</span>, <span class="cm-keyword">new</span> <span class="cm-variable">Matrix4x4</span>[<span class="cm-number">6</span>]{<span class="cm-variable">transformationHsw</span>, <span class="cm-variable">transformationMsw</span>, <span class="cm-variable">transformationSsw</span>, <span class="cm-variable">transformationH</span>, <span class="cm-variable">transformationM</span>, <span class="cm-variable">transformationS</span>});</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text=""></span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> }</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text=""></span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">}</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom-width: 0px; border-bottom-style: solid; border-bottom-color: transparent; top: 1430px;"></div><div class="CodeMirror-gutters" style="display: none; height: 1430px;"></div></div></div></pre></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Zaznacz w inspektorze przy Clock Hand wcześniej przygotowany objekt</span></p></li><li class='md-task-list-item task-list-item task-list-not-done' ><input type='checkbox' /><p><span>Dodaj odpowiednie przekształcenia, tak aby duży zegar pokazywał czas i mały zegar pokazywał czas od uruchomienia aplikacji</span></p></li></ul></li></ol><h1><a name="l-system" class="md-header-anchor"></a><span>L-System</span></h1><p><span>W tej części zajęć skupimy się na tworzeniu L-Systemów i wykorzystaniu ich do reprezentacji zjawisk przyrodniczych.</span></p><blockquote><p><strong><span>Przypomnienie</span></strong>
<strong><span>L-System</span></strong><span> to system przepisywania i gramatyka formalna. Składa się z: symboli, które tworzą ciągi znaków; reguł produkcyjnych, które opisują na co należy przepisać dany znak; aksjomatu, czyli początkowego ciągu znaków; i mechanizmu, który tłumaczy ciąg znaków na reprezentacje geometryczną </span></p></blockquote><p><span>Bazą dla tych zajęć jest książka Algorithmic Beauty of Plants dostępna za darmo pod </span><a href='http://algorithmicbotany.org/papers/abop/abop.lowquality.pdf'><span>linkiem</span></a><span> lub </span><a href='http://algorithmicbotany.org/papers/abop/abop.pdf'><span>w wyższej jakości</span></a></p><h2><a name="składnia-l-systemów" class="md-header-anchor"></a><span>Składnia L-Systemów</span></h2><p><span>Projekt zawiera bibliotekę, która interpretuje L-Systemy. Ich definicję pobiera z oddzielnego pliku. Ich składnie opisuję definicja L-Systemu opisującego rozwój bakterii Anabaena znajduje się w projekcie pod ścieżką </span><code>Assets\LSystem\Anabaena.txt</code><span> i wygląda następująco:</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang=""><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 4px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">#axiom</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">L</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">#rules</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">L-&gt;lR</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">R-&gt;Lr</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">l-&gt;L</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">r-&gt;R</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">#end rules</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom-width: 0px; border-bottom-style: solid; border-bottom-color: transparent; top: 208px;"></div><div class="CodeMirror-gutters" style="display: none; height: 208px;"></div></div></div></pre><p><span>Plik należy zacząć od linii </span><code>#axiom</code><span>, następnie w następnej linii zamieścić ciąg początkowy. Później pomiędzy liniami </span><code>#rules</code><span> i </span><code>#end rules</code><span> umieścić instrukcje przepisywania według zasady:</span>
<code>&lt;znak przepisywany&gt;-&gt;&lt;wynik przepisania&gt;</code>
<span>każdy znak przed strzałką i po strzałce (z wyjątkiem reguł o których później) jest traktowany jako następny symbol. W przypadku kilku reguł, które dotyczą tego samego symbolu wykona się ta, która jest wyżej w pliku. Między reguły można dodawać komentarze, znakiem komentującym jest </span><code>#</code><span>. Jeżeli znak nie posiada żadnej reguły, która by go opisywała, to nie jest on zmieniany. </span></p><p><span>Odpal scenę </span><strong><span>LSystemFromFile</span></strong><span>, zaznacz </span><strong><span>LSystemController</span></strong><span> w panelu po prawej. Po lewej w polu </span><strong><span>L System Path</span></strong><span> wpisz </span><code>Assets\LSystem\Anabaena.txt</code><span> kliknij </span><strong><span>Load File</span></strong><span>, by załadować LSystem. Następnie Evaluate, by wykonać przepisanie. W scenie wyświetlą się obiekty reprezentujące symbole a w konsoli wyświetli się wynik przepisania.</span></p><p><span>Składnia wszystkich rozszerzeń jest zaprezentowana w pliku </span><code>SampleLSystem.txt</code><span> w tej chwili niektóre reguły mogą byc niezrozumiałe, ale może się on przydać później jako wzorzec. </span></p><h2><a name="turtle-graphics" class="md-header-anchor"></a><span>Turtle Graphics</span></h2><p><span>Turtle Graphics jest metodą tworzenia grafiki komputerowej, wykorzystuje kursor (tytułowego żółwia) wykonujący instrukcje w przestrzeni lokalnej.</span></p><p><img src="Turtle-animation-20210313143359379.gif" referrerpolicy="no-referrer" alt="https://en.wikipedia.org/wiki/Turtle_graphics"></p><p><span>L-Systemy można interpretować za pomocą Turtle Graphics, poprzez przypisanie każdemu symbolowi instrukcji jaką ma wykonać żółw. Następnie żółw będzie wykonywał kolejne instrukcje czytając napis od lewej do prawej.</span></p><p><span>Na początek zaczniemy od prostej reprezentacji, gdzie </span><code>+</code><span> będzie oznaczał w kierunku zgodnym z ruchem wskazówek zegara o wskazany kąt, natomiast </span><code>-</code><span> w przeciwnym. Kąt zwyczajowo oznacza się grecką literą $\delta$. Każdy inny symbol będzie oznaczał idź prosto o 1. </span></p><p><span>Odpal Scenę LSystem2D, załaduj plik </span><code>Sierpinski.txt</code><span>, ustaw kąt na 60 stopni i wykonaj kilka kroków. </span></p><h3><a name="zadanie" class="md-header-anchor"></a><span>Zadanie </span></h3><p><span>napisz Lsystem, który będzie rysował gwiazdkę kocha </span></p><ol><li><h4><a name="krzywa-kocha" class="md-header-anchor"></a><span>Krzywa kocha:</span></h4></li></ol><p><img src="../../../../Downloads/Wirtualne Światy treść zadań/Kochsim.gif" /></p><p><img src="../../../../Downloads/Wirtualne Światy treść zadań/RPReplay_Final1615641331.gif" style="zoom:50%;" /></p><p><span>Opis:</span></p><ol><li><span>Podziel linię na 3 równę części</span></li><li><span>Przy środkowej części narysuj równoboczny trójkąt zwrócony na zewnątrz</span></li><li><span>Usuń środkową część pierwotnej lini</span></li></ol><p><span>Musimy z jednej lini zrobić 4 nowe, z czego pierwsza i ostatnia idą w tym samym kierunku, a dwie środkowe idą pod innym kątem (podpowiedź: dając dwa razy + lub - możesz zwiększyć kąt)</span></p><ol start='2' ><li><h4><a name="w-pierwszym-kroku-l-systemu-utwórz-trójkąt" class="md-header-anchor"></a><span>W pierwszym kroku L-Systemu utwórz trójkąt</span></h4><p><img src="Von_Koch_curve.gif" referrerpolicy="no-referrer"></p></li></ol><h2><a name="bracketed-l-systems" class="md-header-anchor"></a><span>Bracketed L-systems </span></h2><p><span>W podstawowej wersji L-Systemy są pojedyńczym ciągiem znaków, by uzyskać możliwość tworzenia rozgałęzień wprowadzamy dwa specjalne znaki </span><code>[</code><span> oraz </span><code>]</code><span> pierwszy mówi, żeby zapamiętać obecny stan, drugi oznacza by wrócić do stanu zapamiętanym przy ostatnim znaku </span><code>[</code><span>. Przykładowo ciąg symboli </span><code>F[+FFF][-F]FF</code><span> dla $\delta=90$ będzie reprezentowany następująco</span>
<img src="im_bracketed-5642437.jpg" referrerpolicy="no-referrer" alt="obraz"></p><h3><a name="zadanie-n245" class="md-header-anchor"></a><span>Zadanie</span></h3><p><span>Stwórz systemy a i e:</span></p><p><img src="../../../../Downloads/Wirtualne Światy treść zadań/Screenshot 2021-03-13 at 14.29.06.png" alt="Screenshot 2021-03-13 at 14.29.06" /><span> </span><img src="Screenshot 2021-03-13 at 14.29.10.png" referrerpolicy="no-referrer" alt="Screenshot 2021-03-13 at 14.29.10"></p><h2><a name="pisanie-własnej-interpretacji-lsystemów" class="md-header-anchor"></a><span>Pisanie własnej interpretacji LSystemów</span></h2><p><span>Wróćmy do sceny LSystemFromFile W tej scenie zamiast kresek pojawiają się figury reprezentujące komórki (czerwona lewa, zielona prawa, niska młoda, wysoka dorosła). Otwórz skrypt AnabeanaTurtle.cs, który odpowiada za rysowanie. Zawiera on klasę </span><code>AnabeanaTurtle</code><span> dziedziczącą po </span><code>TurtleLSystem</code><span>. </span><code>TurtleLSystem</code><span> jest klasą abstrakcyjną, wymaga zdefiniowania funkcji </span><code>initLiteralInterpretation</code><span>, w której należy opisać jak interpretować symbole.</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="CS"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="cs"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 4px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-keyword">protected</span> <span class="cm-keyword">override</span> <span class="cm-keyword">void</span> <span class="cm-variable">initLiteralInterpretation</span>() {</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable">turtleInterpretation</span> <span class="cm-operator">=</span> <span class="cm-keyword">new</span> <span class="cm-variable">Dictionary</span><span class="cm-operator">&lt;</span><span class="cm-variable-3">string</span>, <span class="cm-variable-3">Func</span><span class="cm-operator">&lt;</span><span class="cm-variable-3">float</span>[], <span class="cm-variable">Tuple</span><span class="cm-operator">&lt;</span><span class="cm-variable">GameObject</span>, <span class="cm-variable">Matrix4x4</span><span class="cm-operator">&gt;&gt;&gt;</span>();</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-comment">//turtleInterpretation</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-keyword">var</span> <span class="cm-def">transformation</span> <span class="cm-operator">=</span> <span class="cm-variable">Matrix4x4</span>.<span class="cm-variable">Translate</span>(<span class="cm-keyword">new</span> <span class="cm-variable">Vector3</span>(<span class="cm-number">0.0f</span>, <span class="cm-number">0.1f</span>, <span class="cm-number">0</span>)) <span class="cm-operator">*</span> <span class="cm-variable">Matrix4x4</span>.<span class="cm-variable">Scale</span>(<span class="cm-keyword">new</span> <span class="cm-variable">Vector3</span> (<span class="cm-number">0.05f</span>, <span class="cm-number">0.1f</span>, <span class="cm-number">0.05f</span>));</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text=""></span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable">turtleInterpretation</span>.<span class="cm-variable">Add</span>(<span class="cm-string">"+"</span>, (<span class="cm-variable-3">float</span>[] <span class="cm-variable">args</span>) <span class="cm-operator">=&gt;</span> <span class="cm-keyword">new</span> <span class="cm-variable">Tuple</span><span class="cm-operator">&lt;</span><span class="cm-variable">GameObject</span>, <span class="cm-variable">Matrix4x4</span><span class="cm-operator">&gt;</span>(<span class="cm-atom">null</span>, <span class="cm-variable">Matrix4x4</span>.<span class="cm-variable">Rotate</span>(<span class="cm-variable">Quaternion</span>.<span class="cm-variable">Euler</span>(<span class="cm-number">0</span>, <span class="cm-number">0</span>, <span class="cm-operator">-</span><span class="cm-variable">angle</span>))));</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable">turtleInterpretation</span>.<span class="cm-variable">Add</span>(<span class="cm-string">"-"</span>, (<span class="cm-variable-3">float</span>[] <span class="cm-variable">args</span>) <span class="cm-operator">=&gt;</span> <span class="cm-keyword">new</span> <span class="cm-variable">Tuple</span><span class="cm-operator">&lt;</span><span class="cm-variable">GameObject</span>, <span class="cm-variable">Matrix4x4</span><span class="cm-operator">&gt;</span>(<span class="cm-atom">null</span>, <span class="cm-variable">Matrix4x4</span>.<span class="cm-variable">Rotate</span>(<span class="cm-variable">Quaternion</span>.<span class="cm-variable">Euler</span>(<span class="cm-number">0</span>, <span class="cm-number">0</span>, <span class="cm-variable">angle</span>))));</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text=""></span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-comment">//Wildcard how to represent any other symbol</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable">turtleInterpretation</span>.<span class="cm-variable">Add</span>(<span class="cm-string">"*.*"</span>, (<span class="cm-variable-3">float</span>[] <span class="cm-variable">args</span>) <span class="cm-operator">=&gt;</span> <span class="cm-keyword">new</span> <span class="cm-variable">Tuple</span><span class="cm-operator">&lt;</span><span class="cm-variable">GameObject</span>, <span class="cm-variable">Matrix4x4</span><span class="cm-operator">&gt;</span>(<span class="cm-variable">obj</span>, <span class="cm-variable">transformation</span>));</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; }</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text=""></span></span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom-width: 0px; border-bottom-style: solid; border-bottom-color: transparent; top: 442px;"></div><div class="CodeMirror-gutters" style="display: none; height: 442px;"></div></div></div></pre><p><span>Żeby tego dokonać należy uzupełnić słownik </span><code>turtleInterpretation</code><span>, którego kluczami są opisywane symbole jako stringi. Natomiast wartościami są funkcje, które przyjmują jako argument tablicę parametrów danego symbolu (o tym później) a zwracają Krotkę, której pierwszym elementem jest rysowany obiekt, natomiast drugim transformacja, jaką wykona żółw. Powyższym przykładzie obiekty są czytane z modeli a transformacja zawsze jest taka sama, czyli translacja o wektor (0.1,0,0) i skalowanie o wektor (0.1,0.1,0.1). (Skalowania nie są pamiętane przez żółwia)</span></p><p><span>Te funkcje są wykorzystywane przez żółwia do interpretacji ciągu symboli. Przykładowo </span><code>LRr</code><span> zostanie zinterpretowany następująco:</span></p><ul><li><span>żółw przesuwa się o 0.1 w osi X umieszcza bigL w punkcie (0.1,0,0)</span></li><li><span>żółw przesuwa się o 0.1 w osi X umieszcza bigR w punkcie (0.2,0,0) (ponieważ (0.1,0,0)+(0.1,0,0)=(0.2,0,0) )</span></li><li><span>żółw przesuwa się o 0.1 w osi X umieszcza bigL w punkcie (0.3,0,0)</span></li></ul><h3><a name="zadanie-n260" class="md-header-anchor"></a><span>Zadanie</span></h3><p><span>Jak wyszukasz w internecie obrazki Anabaeny, zobaczysz, że są one często powykręcane, dodaj do macierz przekształceń obroty w osi Y o losowy kąt pomiędzy -20 a 20 stopni.</span></p><h2><a name="parametryczne-l-systemy" class="md-header-anchor"></a><span>Parametryczne L-Systemy </span></h2><p><span>Parametryczne L-Systemy operują na symbolach parametrycznych znakach, czyli takich, które posiadają 0 lub więcej parametrów rzeczywistych. Pozwala to przechowywać różne wewnętrzne stany obiektów. Przykładowo dla modelu Anabeany powyżej rozróżniamy tylko 2 stany, młody i dorosły. Dzięki parametrycznym L-Systemom możemy opisać wiek w sposób bardziej ciągły. Przykładowo poniższy L-System komórki która rośnie i jak osiągnie odpowiedni wiek rozdziela się na dwie młode komórki</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang=""><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 4px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">#axiom </span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">B(1)</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">#rules</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">B(a) : a&lt;2 -&gt; B(a+0.1)</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">B(a) : a&gt;=2 -&gt; B(1)B(1)</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">#end rules</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom-width: 0px; border-bottom-style: solid; border-bottom-color: transparent; top: 156px;"></div><div class="CodeMirror-gutters" style="display: none; height: 156px;"></div></div></div></pre><p><span>Parametry zapisuje się wewnątrz nawiasów po przecinku. W aksjomacie muszą one mieć wartości liczbowe. Po lewej stronie trzeba nadać parametrom nazwy (mogą mieć one więcej niż jeden znak). Symbole są identyfikowane po nazwie i liczbie znaków. Po dwukropku można podać warunki logiczne jakie musi spełnić symbol. można w tym umieszczać operacje matematyczne, dozwolone jest mnożenie, dzielenie, dodawanie i odejmowanie. podobnie w parametrach po prawej stronie </span></p><h3><a name="zadanie-n266" class="md-header-anchor"></a><span>Zadanie</span></h3><p><span>Napisz dla parametrycznej wersji Anabeny taką interpretację, żeby komórki rosły wraz z wiekiem.</span></p><h2><a name="stochastyczne-l-systemy" class="md-header-anchor"></a><span>Stochastyczne L-Systemy</span></h2><p><span>Niektóre procesy biologiczne są zbyt skomplikowane albo niedostatecznie zbadane, żeby można je było je zasymulować lub zwyczajnie nie mamy potrzeby symulować mechanizmów tak dokładnie. Zamiast tego możemy skorzystać z losowości, która przybliży zachowanie natury. </span></p><p><span>Przykładowo możemy losowo decydować czy w roślinie wyrośnie boczna gałąź czy nie. Co realizuje poniższy L-System (znajduje się on także w pliku </span><code>stochastic.txt</code><span>)</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang=""><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 4px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">#axiom</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">B</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">#rules</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">B -&gt; #stochastic</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">p=3 FB</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">p=1 [+FB]FB</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">p=1 [-FB]FB</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">p=1 F</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">#stochastic end</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">#rules end</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text=""></span></span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom-width: 0px; border-bottom-style: solid; border-bottom-color: transparent; top: 286px;"></div><div class="CodeMirror-gutters" style="display: none; height: 286px;"></div></div></div></pre><p><span>W powyższym przypadku mamy symbol B, który symbolizuje merystem (część rośliny zdolną do rozwoju); F oznacza rozwiniętą gałąź. B może rozwinąć łodygę, wytworzyć gałąź po prawej, wytworzyć gałąź po lewej lub zaprzestać rozwój. </span></p><p><span>Odpal scenę </span><code>LSystem2D</code><span> załaduj </span><code>stochastic.txt</code><span> i odpal kilka razy od początku (żeby zresetować, kliknij </span><em><span>Load File</span></em><span>). </span></p><p><span>Reguły stochastyczne należy zacząć od słowa </span><code>#stochastic</code><span>. Następnie po linijce wypisać wyniki, poprzedzając je frazą </span><code>p=W</code><span>, gdzie </span><code>W</code><span> to waga danego wyniku. Wagi mogą być dowolną dodatnią liczbą rzeczywistą. Interpreter na podstawie wag przydzieli prawdopodobieństwo kolejnym wynikom. Przykładowo w powyższym L-Systemie reguły zostaną wykonane następująco:</span></p><ul><li><span>FB z prawdopodobieństwem $\frac{3}{6}$</span></li><li><span>[+FB]FB z prawdopodobieństwem $\frac{1}{6}$</span></li><li><span>[+FB]FB z prawdopodobieństwem $\frac{1}{6}$</span></li><li><span>F z prawdopodobieństwem $\frac{1}{6}$</span></li></ul><p><img src="../CW1/Screenshot 2021-03-14 at 07.32.36.png" alt="Screenshot 2021-03-14 at 07.32.36" style="zoom:33%;" /><img src="../CW1/Screenshot 2021-03-14 at 07.32.56.png" alt="Screenshot 2021-03-14 at 07.32.56" style="zoom:33%;" /><span> </span><img src="../CW1/Screenshot 2021-03-14 at 07.33.17.png" alt="Screenshot 2021-03-14 at 07.33.17" style="zoom:33%;" /></p><h3><a name="zadanie-n599" class="md-header-anchor"></a><span>zadanie </span></h3><p><span>Obecnie zdarza się tak, że L-System wchodzi w ostatnią regułę na samym początku i nic nie wyrasta. Innym razem wyrasta bardzo dużo odgałęzień i całość wymyka się spod kontroli a na pewno przestaje przypominać roślinę. Pomyśl jak można zaradzić tym dwóm problemom, zmodyfikuj L-System tak, by ich uniknąć. Możesz dodać nowe symbole lub/i wykorzystać symbole parametryczne.</span></p><h2><a name="zadanie-domowe" class="md-header-anchor"></a><span>Zadanie domowe</span></h2><p><span>Scena </span><code>LSystem3D</code><span> jest kopią sceny </span><code>LSystem2D</code><span>, korzysta ona ze skryptu </span><code>Turtle3D</code><span> zamiast </span><code>Turtle2D</code><span> (chociaż są one na razie identyczne). Dodaj do </span><code>Turtle3D</code><span> obsługę obrotów w trzech wymiarach za pomocą znaków:</span></p><ul><li><code>&amp;</code><span> obrót do góry (pitch), czyli obrót względem osi X o kąt $\delta$ </span></li><li><code>^</code><span> obrót do góry (pitch), czyli obrót względem osi X o kąt $-\delta$ </span></li><li><code>\</code><span> obrót do obrót w prawo (roll), czyli obrót względem osi Y o kąt $-\delta$ </span></li><li><code>/</code><span> obrót do obrót w lewo (roll), czyli obrót względem osi Y o kąt $\delta$ </span></li></ul><p><span>Poza tym dla symboli </span><code>L</code><span> i </span><code>F</code><span> dodaj interpretacje kolejno jako liść i kwiat. W folderze Models są gotowe modele, ale możesz ściągnąć własne.</span></p><p><span>Wykorzystaj dotychczasową wiedzę i powyższą interpretację, by stworzyć L-System generujący roślinę polną jak poniższy chaber. </span></p><p><img src="../CW1/7_Centaurea_cyanus.jpg" referrerpolicy="no-referrer" alt="rysunek chabra z wikipedii"></p></div>
</body>
</html>